淺談線程池
- 線程池(英語:thread pool):一種線程使用模式。線程過多會帶來調度開銷,進而影響緩存局部性和總體性能。而線程池維護着多個線程,等待着監督管理者分配可併發執行的任務。這避免了在處理短期任務時建立與銷燬線程的代價。線程池不只可以保證內核的充分利用,還能防止過度調度。可用線程數量應該取決於可用的併發處理器、處理器內核、內存、網絡sockets等的數量。 例如,線程數通常取cpu數量+2比較合適,線程數過多會致使額外的線程切換開銷。
- 任務調度以執行線程的常見方法是使用同步隊列,稱做任務隊列。池中的線程等待隊列中的任務,並把執行完的任務放入完成隊列中。
C++11多線程總結
- 線程建立的極限數量通常爲 2000 個。
線程建立數量建議緩存
- 採用某些開發建議和指示來確保程序高效執行。
- 根據實際應用場景;考慮可能被阻塞的最大線程數量,即建立多餘最大被阻塞(耗時任務)線程數量的線程。如,有100個線程可能處理耗時任務,啓動 110 個線程就能夠保證有空閒線程處理其它請求。
- 線程的建立數量儘可能不要超過 500 個,儘可能控制在 200 個以內。
C++線程相關參考網址
cplusplus.com
cppreference.com網絡