一 緣由:
最近因工作問題,需要實現乙個簡單的執行緒池,滿足一下要求,
基本上就是這兩個要求。下面討論下實現上的問題。
二 windows平台
1 windows平台實現乙個執行緒池(不使用完成埠),我最初的想法是:
問題:2 windows平台上使用完成埠
三 linux平台
1 linux平台實現執行緒池,基本思路和windows一樣,但是由於linux提供的執行緒同步原語(posix)不如windows好用,導致有一些特殊的地方需要注意:
但是,現在有20個執行緒,總不可能建立20個pipe吧?即使有20個pipe,那麼我要喚醒哪個執行緒,就得單獨往那個執行緒的writefd寫資料。這明顯不是乙個好辦法。只能使用condition+mutex了。為了避免驚群,操作cond的時候,只能使用signal,而非broadcast
超時任務的處理,那麼也只能和windows一樣的方法了
四 乙個實際的執行緒池設計
實現乙個執行緒池
一.執行緒最主要的三個同步機制 1.訊號量 2.互斥鎖 3.條件變數 二.對三個同步機制分別實現乙個包裝類 ifdef locker h define locker h include include 訊號量的封裝 class sem sem bool wait bool post private ...
執行緒池(一) 實現乙個簡單的執行緒池
我們知道頻繁的建立 銷毀執行緒是不可取的,為了減少建立和銷毀執行緒的次數,讓每個執行緒可以多次使用,我們就可以使用執行緒池,可以降低資源到的消耗。執行緒池裡面肯定有多個執行緒,那麼我們就簡單的用乙個陣列來儲存執行緒,那我們我們預設裡面有 5 個執行緒。那我們執行緒池裡只有五個執行緒能同時工作,那同時...
執行緒池 如何正確的配置乙個執行緒池
我們在建立自己的執行緒池時,會時常因為不知道給核心執行緒數或者最大執行緒數設定多少為好,其實這個時需要看你的執行緒池的使用場景和伺服器cup的配置,根據這些前置條件,我們再去判斷如何去設定合適的執行緒數,並不是我們想設定多少執行緒數大小就可以設定多少,這樣可能會導致執行緒發揮不到最大的效能,甚至還有...