Поделиться через


Когда следует использовать многозадачность

Существует два способа реализации многозадачности: как один процесс с несколькими потоками или как несколько процессов, каждый из которых содержит один или несколько потоков. Приложение может поместить каждый поток, требующий частного адресного пространства и частных ресурсов в собственный процесс, чтобы защитить его от действий других потоков обработки.

Многопоточный процесс может управлять взаимоисключающими задачами с помощью потоков, таких как предоставление пользовательского интерфейса и выполнение фоновых вычислений. Создание многопоточного процесса также может быть удобным способом структурировать программу, которая выполняет несколько аналогичных или идентичных задач одновременно. Например, именованный сервер канала может создать поток для каждого клиентского процесса, который подключается к каналу. Этот поток управляет взаимодействием между сервером и клиентом. Процесс может использовать несколько потоков для выполнения следующих задач:

  • Управление входными данными для нескольких окон.
  • Управление входными данными с нескольких устройств связи.
  • Различает задачи разного приоритета. Например, поток с высоким приоритетом управляет критически важными задачами времени, а поток с низким приоритетом выполняет другие задачи.
  • Оставить пользовательский интерфейс отзывчивым, выделяя время на фоновые задачи.

Обычно это более эффективно для приложения для реализации многозадачного процесса путем создания одного многопоточного процесса, а не создания нескольких процессов по следующим причинам:

  • Система может быстрее переключать контекст для потоков, чем процессы, так как процесс имеет больше накладных расходов, чем поток (контекст процесса больше контекста потока).
  • Все потоки процесса совместно используют одно адресное пространство и могут получить доступ к глобальным переменным процесса, что может упростить обмен данными между потоками.
  • Все потоки процесса могут совместно использовать открытые дескриптора для ресурсов, например файлов и каналов.

Существуют другие методы, которые можно использовать вместо многопоточности. Наиболее важными из них являются следующие: асинхронные входные и выходные данные (ввода-вывода), порты завершения ввода-вывода, асинхронные вызовы процедур (APC) и возможность ожидать нескольких событий.

Один поток может инициировать несколько временных запросов ввода-вывода, которые могут выполняться одновременно с помощью асинхронного ввода-вывода. Асинхронные операции ввода-вывода можно выполнять на файлах, каналах и серийных устройствах связи. Дополнительные сведения см. в разделе Синхронизация и совмещенные входные/выходные данные.

Один поток может блокировать собственное выполнение, ожидая возникновения любого или всего нескольких событий. Это более эффективно, чем использование нескольких потоков, каждый из которых ожидает одно событие, и более эффективно, чем использование одного потока, который потребляет время процессора, постоянно проверяя, произошли ли события. Для получения дополнительной информации см. раздел функций ожидания.