2016-11-27 153 views
1

boost docboost :: asio :: io_service的concurrency_hint是什麼意思?

io_service對象( 的std ::的size_t concurrency_hint);
構建一個關於所需併發級別的提示。

參數

concurrency_hint有人建議的執行情況,應該多少 線程允許同時運行。

這是什麼意思「對執行的建議」?

如果我用'2'構造對象,它可能只啓動1個線程嗎?
如果我有一個4核的CPU,並且我用'4'或'5'來構造對象會發生什麼?

回答

3

併發提示允許底層實現根據應該運行io_service的併發線程數量進行選擇。例如:

  • 的I/O完成端口,它集併發爲完成端口的最高水平。提供的併發提示爲NumberOfConcurrentThreads參數CreateIoCompletionPort()。見I/O Completion Ports文檔瞭解更多信息:

    此值限制與完成端口相關聯的可運行的線程數。當與完成端口相關聯的可運行線程的總數達到併發值時,系統將阻止與該完成端口相關聯的任何後續線程的執行,直到可運行線程的數量下降到低於併發值。

  • 當設置爲1時,優化實施以避免不必要的鎖定。所述Revision History說明:在單線程用例

    使用線程局部操作隊列(即,當concurrency_hint爲1),以消除一個鎖定/解鎖對。

+0

謝謝您的回答,請讓我知道如果我猜中了: 所以'concurrency_hint'說線程隊列的大小? 它並不涉及CPU內核的實際數量,只是說:「你可以在這個'io_service'中運行X個併發線程? – hudac

+0

@hudac是。對於I/O完成端口,'concurrency_hint'集合線程隊列的上限核心將是線程並行性的限制,但線程併發可以超過核心數量鏈接的I/O完成端口文檔提供了對NumberOfConcurrentThreads值和線程池大小的推薦。 –

+0

爲什麼它叫'concurrency_hint'而不是'concurrency'?看起來像提示是隊列大小本身,不是? 你的答案會改變而不是I/O完成端口嗎? 我的意思是,對於任何'boost :: asio :: io_service'其中包含套接字,文件描述符,事件fds,計時器fds ... – hudac