線程池與非線程池應用場景及模型對比分析

在網絡編程中常常用到線程池和鏈接池,今天就對其中經常使用的線程池的基本應用場景和模型作個簡單的對比分析。前端

一、  業務流程對比 web

a、  非線程池業務流模型: 編程

 


上圖標識了基本的非線程池的線程模型,前端1有多少鏈接則前端客戶端2與前端服務器端3均需創建一對一的線程數進行響應的鏈接。前端服務器端3與後端服務器端4也需創建響應數目的線程進行鏈接處理相關業務。後端

當一個任務處理完畢後線程退出,在下一個任務到來的時候前端服務器端建立新的線程來處理新的任務。服務器

 

b、線程池模型:網絡


上圖標識了基本的線程池模型。前端客戶端大量的鏈接經過服務端的任務接收線程將鏈接任務放入前端服務器端的任務隊列中,前端服務器端起固定數量的處理線程處理前端的任務,當處理線程處理完任務後從任務隊列中獲取下一個處理任務。保證了前端服務器端和後端服務器端的鏈接數不會超過前端服務器端的處理任務線程數n,從而保證了後端服務器端的壓力。併發

當處理線程處理完一個任務而任務隊列中沒有任務的時候線程並不退出,阻塞等待新的任務。高併發

經過上圖能夠看出,當前端服務器端經過設置合理的處理線程數和任務隊列大小,能夠有效的屏蔽前端客戶端高併發量對後端服務器端的衝擊。優化

 

 

二、  應用場景分析對比spa

a、  非線程池模型

適用於單次鏈接任務執行時間較長,併發量不高的狀況。一旦併發量很高則線程頻繁建立的開銷是巨大的。

b、  線程池模型

適用於單次任務執行時間較短,但併發訪問量高的狀況。當處理線程數設置極大的時候和非線程池模型幾乎沒有差異

 

三、  優化細節

a、在線程池模型中,能夠預建立部分處理線程,隨後根據實際的業務需求來建立新的線程,直到建立設置的最大線程數

b、必定時間內關閉一些空閒線程,回收部分資源

相關文章
相關標籤/搜索