См. http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx
Когда общее число исполняемых потоков, связанных с портом завершения, достигает значения параллелизма, система блокирует выполнение любых последующих потоков, связанных с этим портом завершения, до тех пор, пока не будет достигнуто число.количество выполняемых потоков падает ниже значения параллелизма.
Где «значение параллелизма» равно NumberOfConcurrentThreads
.(И есть еще много хороших вещей.)
Если вы не делаете что-то немного необычное, 0, кажется, является хорошим значением для передачи, где значение параллелизма - это число ядер.После этого вы можете получить каждое ядро, извлекающее результаты завершения из очереди, не блокируя и не переключая контекст, при условии, что для этого достаточно работы.
Любые дополнительные потоки, которые выполняют вызовы GetQueuedCompletionStatus
, будут блокироваться, даже если есть завершенияимеется.