因為總有些子任務是可以併發的,多個子任務併發執行了很可能就能夠避免cpu需要io操作的完成了,而且能夠提高系統的吞吐量。
方法二,快取多執行緒的共享資料。
當你已經在使用多執行緒了,很多時候必須使用共享資料。如果,資料是唯讀的,那麼可以在第一次獲取後儲存起來,以後就可以重複使用了。但是,第一次的獲取還是無法避免的需要執行緒同步操作的。
方法三,如果執行緒數目有限,就不要共享資料。
做法是為每乙個執行緒例項化乙個單獨的資料,其實就是為每乙個執行緒分配一塊資料使用。這樣沒有執行緒同步操作了,速度可以盡可能的提示。
方法四,如果沒辦法確定執行緒數目到底有多少,那麼使用部分共享吧。
部分共享其實就是使用多個資源池代替乙個資源池,資源池的數目得更加經驗來確定。如下圖所示,
最後在提乙個叫做thundering herd的問題,該問題維基百科有定義.大意是,當多個執行緒在等待乙個資源的時候,如果事件等待到了,作業系統是喚醒所有等待的執行緒讓它們自己去競爭資源了還是選擇乙個執行緒把資源給它。當然喚醒所有的執行緒肯定開銷要大,而且所有沒有搶到資源的執行緒還得重新進入等待狀態,這無疑造成很多沒必要的操作,浪費了沒必要的執行緒上下文切換。總之,會不會存在thundering herd還是跟不同的作業系統有關的。萬一存在thundering herd了,多執行緒可能就沒那麼好辦了。
到現在我們知道了為什麼多cpu並不能成倍提高程式的速度了。首先因為有些任務無法並行,其次即使是並行cpu之間還是有很多牽制的。本書的內容主要來自提高c++效能的程式設計技術一書
如何提高多執行緒程式的cpu利用率
正如大家所知道的那樣,多核多cpu越來越普遍了,而且編寫多執行緒程式也是件很簡單的事情。在windows下面,呼叫createthread函式一次就能夠以你想要的函式位址新建乙個子執行緒執行。然後,事情確實你發現建立多執行緒根本沒有讓程式快多少,也沒有提高多少cpu利用率,甚至可能讓cpu利用率下降...
Java多執行緒9 多執行緒的提高
之前的內容 理解多執行緒。建立多執行緒。多執行緒的安全問題 分析與理解。安全問題的解決辦法 鎖 之前的例子都是多個執行緒執行乙個執行緒任務,多執行緒的提高 多個執行緒執行不同的執行緒任務,併發執行 例如 消費者與生產者,乙個消費乙個生產,執行的執行緒任務不同,但是處理的資源是一樣的。但是要求同時進行...
如何尋找多執行緒程式的bug
3.縮小錯誤範圍 4.總結 確保程式以單執行緒方式執行時沒有錯誤。這是找bug的基礎。可能原因1 對mutex使用lock後忘記解鎖 例如 沒有對每一種可能的情況進行unlock。mutex m1 thread1 m1.unlock return 可能原因2 發生死鎖 例如 使用普通鎖對遞迴程式加鎖...