學一門新技術,還是要問那個問題,為什麼我們需要這個技術,這個技術能解決什麼痛點。
一、為何需要執行緒池那麼為什麼我們需要執行緒池技術呢?多執行緒程式設計用的好好的,幹嘛還要引入執行緒池這個東西呢?引入一個新的技術肯定不是為了裝酷,肯定是為了解決某個問題的,而服務端一般都是效率問題。
我們可以看到多執行緒提高了CPU的使用率和程式的工作效率,但是如果有大量的執行緒,就會影響效能,因為要大量的建立與銷燬,因為CPU需要在它們之間切換。執行緒池可以想象成一個池子,它的作用就是讓每一個執行緒結束後,並不會銷燬,而是放回到執行緒池中成為空閒狀態,等待下一個物件來使用。
二、C++中的執行緒池但是讓人遺憾的是,C++並沒有在語言級別上支援執行緒池技術,總感覺C++委員會對多執行緒的支援像是猶抱琵琶半遮面的羞羞女一樣,無法完全的放開。
雖然無法從語言級別上支援,但是我們可以利用條件變數和互斥鎖自己實現一個執行緒池。這裡就不得不囉嗦幾句,條件變數和互斥鎖就像兩把利劍,幾乎可以實現多執行緒技術中的大部分問題,不管是生產消費者模型,還是執行緒池,亦或是訊號量,所以我們必須好好掌握好這兩個工具。
相關閱讀:
最新評論