CreateIoCompletionPort中的并发线程数

CreateIoCompletionPort的MSDN页面上,这个函数的最后一个参数有一个非常简短的描述:

NumberOfConcurrentThreads [in]

操作系统可以允许并发处理I / O完成端口的I / O完成数据包的最大线程数…

究竟是什么意思? 我混淆了“同时”这个词 – 这听起来像不同的线程处理相同的I / O数据包? 而且,如果我从比允许的更多的线程调用GetQueuedCompletionStatus会发生什么?

Solutions Collecting From Web of "CreateIoCompletionPort中的并发线程数"

请参阅http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx

当与完成端口相关联的可运行线程的总数达到并发值时,系统将阻止与该完成端口相关联的任何后续线程的执行,直到可运行线程的数量降至低于并发值。

其中“并发值”是NumberOfConcurrentThreads 。 (还有更多好东西。)

除非你做了一些不寻常的事情,否则0似乎是一个很好的值,其中并发值是内核的数量。 然后,假设有足够的可用工作,则可以让每个核心完成结果,而不会阻塞或切换上下文。

调用GetQueuedCompletionStatus任何额外线程都会阻塞,即使有可用的完成。