[英]Throughput of trivially concurrent code does not increase with the number of threads
[英]Number of Concurrent Threads in CreateIoCompletionPort
在CreateIoCompletionPort
的 MSDN 頁面上,對此 function 的最后一個參數有一個非常簡短的描述:
NumberOfConcurrentThreads [in]
操作系統允許並發處理 I/O 完成端口的 I/O 完成數據包的最大線程數...
它到底是什么意思? 我對“並發”這個詞感到困惑——這聽起來像是不同的線程處理同一個 I/O 數據包? 而且,如果我從超過允許的線程數中調用GetQueuedCompletionStatus
會發生什么?
請參閱http://msdn.microsoft.com/en-us/library/aa365198(v=VS.85).aspx
當與完成端口關聯的可運行線程的總數達到並發值時,系統會阻止與該完成端口關聯的任何后續線程的執行,直到可運行線程的數量降至並發值以下。
其中“並發值”是NumberOfConcurrentThreads
。 (還有更多好東西。)
除非您正在做一些不尋常的事情,否則 0 似乎是一個很好的傳遞值,其中並發值是核心數。 然后,假設有足夠的可用工作,您可以讓每個核心從隊列中提取完成結果,而無需阻塞或上下文切換。
任何調用GetQueuedCompletionStatus
的額外線程都將阻塞,即使有可用的完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.