高並發,執行耗時短的任務,還有低並發,執行耗時長的任務,各自選取什么樣的線程池比較合理?為什么?如果業務場景是高並發,且任務耗時長時,有什么解決思路?


線程池的關鍵點是:1、盡量減少線程切換和管理的開支; 2、最大化利用cpu。
對於1,要求線程數盡量少,這樣可以減少線程切換和管理的開支;
對於2,要求盡量多的線程,以保證CPU資源最大化的利用。
 
所以對於任務耗時短的情況,要求線程盡量少,如果線程太多,有可能出現線程切換和管理的時間,大於任務執行的時間,那效率就低了;
對於耗時長的任務,要分是cpu任務,還是io等類型的任務。如果是cpu類型的任務,線程數不宜太多;但是如果是io類型的任務,線程多一些更好,可以更充分利用cpu。
所以:
高並發,低耗時的情況:建議少線程,只要滿足並發即可;例如並發100,線程池可能設置為10就可以
低並發,高耗時的情況:建議多線程,保證有空閑線程,接受新的任務;例如並發10,線程池可能就要設置為20;
高並發高耗時:1要分析任務類型,2增加排隊,3、加大線程數

對於高並發耗時長的情況,我認為,思路就是把一個難以解決的問題轉化成我們已知的已經有解決方案的問題,以此來解決。
所以 ,高並發又耗時長,可以轉化為
      1、高並發,耗時短的問題   –>   異步處理+回調,和情況1吻合
      2、低並發,耗時長的問題   –>   前端加load balance,把高並發分攤成若干低並發,和情況2吻合
其實說到核心,如果真遇到高並發耗時長的場景,只能是加機器,加計算單元(無論是異步加回調還是load balance)
也許有更好的想法,歡迎大家討論,再次感謝一樓的回答。謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM