On MSDN 页面CreateIoCompletionPort http://msdn.microsoft.com/en-us/library/aa363862%28v=VS.85%29.aspx该函数的最后一个参数有一个非常简短的描述:
并发线程数 [in]
操作系统允许的最大线程数
并发处理 I/O 完成数据包以实现 I/O 完成
港口...
它到底是什么意思?我对“并发”这个词感到困惑 - 这听起来像是不同的线程处理相同的 I/O 数据包?另外,如果我打电话会发生什么GetQueuedCompletionStatus
来自超出允许数量的线程?
See http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx
当与关联的可运行线程总数
完成端口达到并发值,系统阻塞
执行与该完成相关的任何后续线程
端口,直到可运行线程数低于并发数
价值。
其中“并发值”是NumberOfConcurrentThreads
。 (还有更多好东西。)
除非您正在做一些不寻常的事情,否则 0 似乎是一个很好的传递值,其中并发值是核心数。然后,假设有足够的可用工作,您就可以让每个核心将完成结果从队列中拉出,而无需阻塞或上下文切换。
任何调用的额外线程GetQueuedCompletionStatus
即使有可用的完成,也会阻塞。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)