1. 程式人生 > >近期業務需要所引發的性能優化問題,淺談線程池性能優化

近期業務需要所引發的性能優化問題,淺談線程池性能優化

adp 利用 ger 周期 int 以及 工作 性能優化 取代

線程池對於性能優化無處不在

1.樓主在平時產品開發過程中所遇到的性能問題,特別是最近特別流行的微服務架構、

web - java - 底層數據源(python亦或者opensatck),對於這種前後臺分離的場景

無時無刻會存在對於業務場景需要對同一數據源進行百次,千次的重復調用過程、

性能方面就會出現接口延遲,過慢,超時等情況

下面就樓主最近遇到的一個業務場景加以舉例說明:做雲計算相關的想必都是知道,我們在為客戶提供單板的過程中(也就是物理機);會對眾多的單板進行管理,這裏我們就引進主機組;

主機組就是用來管理單板的存在,往往在使用過程中,會存在資源不足的情況,我們此時就需要將資源不足的單板遷移到別的主機組上,從而做到虛擬機資源的合理利用,對此在遷移過程

中可能能會出現成敗上前的主機批量操作,對此串行顯然已經不能滿足我們的訴求了,此時就要引進線程池

2.線程池在該高並發場景下的使用來提高性能

首先說下線程池中幾個重要的類

技術分享圖片

   1、newFixedThreadPool創建一個指定工作線程數量的線程池。每當提交一個任務就創建一個工作線程,如果工作線程數量達到線程池初始的最大數,則將提交的任務存入到池隊列中。

  2、newCachedThreadPool創建一個可緩存的線程池。這種類型的線程池特點是:
    1).工作線程的創建數量幾乎沒有限制(其實也有限制的,數目為Interger. MAX_VALUE), 這樣可靈活的往線程池中添加線程。
    2).如果長時間沒有往線程池中提交任務,即如果工作線程空閑了指定的時間(默認為1分鐘),則該工作線程將自動終止。終止後,如果你又提交了新的任務,則線程池重新創建一個工作線程。

  3、newSingleThreadExecutor創建一個單線程化的Executor,即只創建唯一的工作者線程來執行任務,如果這個線程異常結束,會有另一個取代它,保證順序執行(我覺得這點是它的特色)。單工作線程最大的特點是可保證順序地執行各個任務,並且在任意給定的時間不會有多個線程是活動的 。

  4、newScheduleThreadPool創建一個定長的線程池,而且支持定時的以及周期性的任務執行,類似於Timer

樓主以newFixedThreadPool的方式為主簡單測試下效果:

首先是傳統for循環串行時,

技術分享圖片

處理10000條數據,每次業務處理假設消耗10ms,總用時107857ms

技術分享圖片

下面使用線程池為size為100的,處理10000條數據總用時1100ms,有沒有很神奇,效率接近10倍

技術分享圖片

技術分享圖片

至此,樓主要說的線程池處理海量數據,或者高並發時簡單應用告一段落。。。。。

類似於這種線程池工具類,論壇有很多,大家可以參考~~~~

如有不對之處,望指正啦

近期業務需要所引發的性能優化問題,淺談線程池性能優化