CreateIoCompletionPort中的并发线程数

Roc*_*etR 4 c++ windows winapi

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

NumberOfConcurrentThreads [in]

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

究竟是什么意思?我对'并发'这个词感到困惑 - 这听起来像不同的线程处理相同的I/O数据包?而且,如果我GetQueuedCompletionStatus从更多的线程调用而不是允许的话会发生什么?

Ala*_*kes 7

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

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

"并发价值"的地方NumberOfConcurrentThreads.(而且还有很多好东西.)

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

GetQueuedCompletionStatus即使有可用的完成,任何进行调用的额外线程都将阻塞.