多線程編程時,最佳線程數目與什麼有關,核數,還有其他的嗎。我想達到最佳性能,不知道除了增加電腦核數,還有啥呢。想得到個建模函數,曲線吧


我所瞭解到的原則是:活躍線程數為 CPU(核)數時最佳。過少的活躍線程導致 CPU 無法被充分利用,過多的活躍線程導致過大的線程上下文切換開銷。

首先線程應該是活躍的,處於 IO 的線程,休眠的線程等均不消耗 CPU。在實際環境中,當前活躍線程數一直在變化,很多活躍線程可能因為需要進行 IO 處理或等待資源而處於非活躍狀態,假如說線程的數量等於 CPU(核)數,這就意味著活躍線程數小於 CPU(核)數。這就導致有一些文檔建議使用 CPU * 2 + 2 之類的規則來確定線程數量,但是實際需要的線程數和線程實際工作內容有關,線程如果一直處於活躍狀態,那麼線程數量達到或略高於 CPU(核)數能較為充分利用 CPU,線程如果常常需要進行等待而處於非活躍狀態,這時候線程數應該較多才能保證存在足夠多的活躍線程以充分利用 CPU。但這只是簡單考量,有時候實際中的情況更為複雜,必須考慮清楚線程到底會以何種行為工作,針對性的實驗得到一個合理值是必要的。


想起好多Android源碼編譯的教程都把它設為核數的兩倍。迄今不知道是什麼原理


推薦閱讀:
相關文章