Порт завершения ввода / вывода против QueueUserApc?

В Windows есть два способа вставить рабочие элементы, чтобы избежать создания слишком большого количества потоков:

Средства 1: использовать IOCP;

Средства 2: использовать QueueUserApc.

Однако средство 1 гораздо сложнее, чем средство 2.

Итак, мой вопрос: каковы преимущества средств 1 по сравнению со средствами 2?

5

Решение

Когда вы звоните QueueUserApc, вы должны быть нацелены на конкретную тему.

IOCP имеет встроенный механизм диспетчеризации потоков, который QueueUserApc Недостатки, позволяющие выбрать наиболее эффективный поток из пула потоков. Механизм диспетчеризации потоков автоматически предотвращает одновременное выполнение слишком большого количества потоков (что приводит к дополнительным переключениям контекста и дополнительным конфликтам) или одновременное выполнение слишком небольшого количества потоков (что приводит к снижению производительности).

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

Кроме того, IOCP может быть легко подключен к I / O, так что события I / O инициируют отправку потоков, заблокированных на порте IOCP. Это наиболее эффективный способ ввода-вывода для большого количества адресатов в Windows.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]