CreateIoCompletionPort中的并发线程数

时间:2011-08-10 18:42:06

标签: c++ windows winapi

MSDN page for CreateIoCompletionPort上,对此函数的最后一个参数进行了非常简短的描述:

  

NumberOfConcurrentThreads [in]

     

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

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

1 个答案:

答案 0 :(得分:7)

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

  

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

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

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

即使有可用的完成,任何拨打GetQueuedCompletionStatus的额外线程都会被阻止。