国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網

標題: 利用C++語言設計可擴展線程池 [打印本頁]

作者: Hugo801122    時間: 2014-4-11 01:40
標題: 利用C++語言設計可擴展線程池
  摘要:在各種業務解決方案的設計中,服務器處理任務的效率是衡量方案優劣的一個重要標準。使用多線程技術并發處理任務是提高服務器效率的一個主要手段。但是頻繁的線程創建、銷毀和任務的分配也會降低系統效率。本文設計了一個通用的線程池,根據不同服務器所處理的任務的特點,可以設置對應的線程池參數,最大幅度的提高系統性能。
  關鍵字:線程池多線程任務虛函數異常
  概述
  在各種業務解決方案的設計過程中,服務器處理任務的效率往往決定了方案的成敗。多線程處理任務是提高服務器效率的主要手段,它提高了對服務器資源的利用,使得任務可以并發處理。但如果服務器處理的任務的特點是輕量級、頻率高,那么線程的創建與銷毀會非常頻繁,而系統用于處理線程的創建與銷毀的開銷會占相當大的比重,反而降低了系統的效率。通過線程池技術,可以減少頻繁的線程的創建與銷毀對系統性能的影響。
  線程池是預先創建線程的一種技術。線程池在還沒有任務到來之前,創建一定數量(N1)的線程,放入空閑隊列中。這些線程都是處于阻塞(Suspended)狀態,不消耗CPU,但占用較小的內存空間。當任務到來后,緩沖池選擇一個空閑線程,把任務傳入此線程中運行。當N1個線程都在處理任務后,緩沖池自動創建一定數量的新線程,用于處理更多的任務。當系統比較空閑時,大部分線程都一直處于暫停狀態,線程池自動銷毀一部分線程,回收系統資源。
  通用線程緩沖池的設計,不僅要實現上述功能,還要考慮此設計的可移植性,減少重復開發。設計中需要考慮的重點是:
任務對象的通用性;線程創建和銷毀策略;任務的分配策略。  分析與設計
  1、任務對象的通用性
  不同的業務解決方案有各自獨特的任務處理方法,任務的劃分上也就千差萬別。為了使得在處理任務對象的時候達到一定程度的通用性,任務對象的設計上必須與實際任務的處理邏輯完全無關。從任務執行的角度看,任務不過是處理流程的一次或者多次執行的過程,可以這樣來定義任務接口:
class Task
{
public:
Task();
virtual ~Task();
virtual bool run() = 0;
};
  Task類是所有任務類的基類,其中的純虛函數run()是任務流程的入口,工作線程在處理任務的時候就從此處開始執行任務的處理流程。設計一個新的任務時,只需要繼承Task接口,新的任務就可以放入線程池中執行。
  任務的創建、執行和銷毀這樣來設計:
  (1)任務在其需要的時候才創建。任務的創建通過new操作,動態創建具體的任務對象,然后傳入線程池,由線程池自動分配線程來執行此任務。
  (2)任務是否執行完畢由其自身來決定。一個未知任務什么時候執行完畢是不可能預測的,必須任務本身來決定。這個策略通過,Task::run()的返回值來實現。當工作線程執行一次任務時,如果返回值為true,表示任務執行完畢,就用delete操作銷毀此任務;如果返回值為false,表示任務需要執行的工作并未完成,繼續執行此任務。
  這樣的策略,使得在設計新的任務處理流程的時候,不需要過多的關心任務的接口規范,只需要在新任務類的構造函數中初始化各種資源,在新任務類的析構函數中回收資源,在run()方法中實現主要的處理邏輯,那么新的任務類即可在線程池中執行。
  2、線程的創建與銷毀
  線程緩沖池中的維持的線程數量應該按照任務處理的需求來定。
  在緩沖池剛剛建立時,線程池中有一定數量(N1)的已創建好的線程,這樣可以使得新任務可以及時的得到執行。比如,某客戶端在向服務器發送登陸請求的時候,這樣一個請求使得服務器通常需要創建好幾個相互有關聯的任務。也就是說,客戶端與服務器端的一次交互,通常會產生一定數量的任務。根據一個服務器所處理的業務,估計出平均情況下,一次業務產生的任務數量N2。那么N1應該是N2的整數倍,N1=N2×n1,減少由于線程不夠而再創建線程的概率,才能使得服務器在業務處理初期最為高效。
  在線程緩沖池中的所有線程都處于繁忙狀態的時候,線程池就會創建新的線程,設創建N3個。由以上分析,為了減少由于線程不夠而再創建線程的概率,N3也應該是N2的整數倍,N3=N2×n2。
  當服務器業務減少,出現大量線程閑置的情況,就應該銷毀一部分線程。很顯然,這里應該使用超時策略,當某些線程在超過時間T仍然處于閑置狀態,就銷毀一部分空閑線程。設銷毀N4個空閑線程,為了減少由于線程不夠而再創建線程的概率,N4也應該是N2的整數倍,N4=N2×n3。當然,為了使得新任務及時得到處理,即使服務器一直處于空閑,也應該保留N1個線程。






歡迎光臨 電子工程網 (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 国产欧美日韩在线不卡第一页 | 久久国产麻豆 | 六月婷婷久久 | 欧美日韩高清不卡一区二区三区 | 青青久久网 | 国产一区三区二区中文在线 | 日本不卡一区二区三区视频 | 亚洲一逼| 欧美国产亚洲一区二区三区 | 三级福利视频 | 不卡影院在线观看 | 99精品观看 | 国产精品五月天 | 四虎免费大片aⅴ入口 | 欧美专区一区二区三区 | 色噜噜狠狠先锋影音久久 | 免费岛国小视频在线观看 | 77成人网 | 欧美视频一区二区三区在线观看 | 高清乱码精品福利在线视频 | 西瓜视频在线观看免费 | 午夜日韩 | 国产精品国内免费一区二区三区 | 亚洲国产欧美在线 | 黄色小视频在线播放 | 九九热最新网址 | 日日操日日摸 | 日日夜夜操天天干 | 8050午夜一级二级全黄 | 91精品一区二区 | 亚洲国产精品一区二区三区久久 | 免费亚洲成人 | 激情视频网址 | 五月伊人网 | 中文字幕日本不卡一二三区 | 国产精品第九页 | 狠狠久久久久久亚洲综合网 | 国产精品久久久久久久成人午夜 | 恐怖片大全免费观看 | 卡一卡二卡三免费专区2 | 一级a毛片免费 |