Количество параллельных потоков в CreateIoCompletionPort - PullRequest
4 голосов
/ 10 августа 2011

На Страница MSDN для CreateIoCompletionPort очень краткое описание последнего параметра этой функции:

NumberOfConcurrentThreads [in]

Максимальное количество потоков, которое операционная система может разрешить одновременно обрабатывать пакеты завершения ввода / вывода для завершения ввода / вывода порт ...

Что именно это значит? Я запутался со словом «одновременно» - похоже, разные потоки обрабатывают один и тот же пакет ввода-вывода? А также, что произойдет, если я вызову GetQueuedCompletionStatus из большего количества потоков, чем разрешено?

1 Ответ

7 голосов
/ 11 августа 2011

См. http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx

Когда общее число исполняемых потоков, связанных с портом завершения, достигает значения параллелизма, система блокирует выполнение любых последующих потоков, связанных с этим портом завершения, до тех пор, пока не будет достигнуто число.количество выполняемых потоков падает ниже значения параллелизма.

Где «значение параллелизма» равно NumberOfConcurrentThreads.(И есть еще много хороших вещей.)

Если вы не делаете что-то немного необычное, 0, кажется, является хорошим значением для передачи, где значение параллелизма - это число ядер.После этого вы можете получить каждое ядро, извлекающее результаты завершения из очереди, не блокируя и не переключая контекст, при условии, что для этого достаточно работы.

Любые дополнительные потоки, которые выполняют вызовы GetQueuedCompletionStatus, будут блокироваться, даже если есть завершенияимеется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...