彭 華
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
隨著網(wǎng)絡(luò)和信息安全技術(shù)的快速發(fā)展,每天有數(shù)以萬計(jì)的用戶在不斷訪問各類大型網(wǎng)站,服務(wù)器需要并發(fā)處理大量的用戶連接請(qǐng)求。如何使服務(wù)器在面對(duì)大量訪問請(qǐng)求時(shí)仍能應(yīng)付自如,成為需要迫切解決的問題。在服務(wù)器的網(wǎng)絡(luò)處理能力設(shè)計(jì)時(shí),通常采用多路復(fù)用I/O機(jī)制加線程池技術(shù)實(shí)現(xiàn)[1]。
但是,大量訪問請(qǐng)求產(chǎn)生的網(wǎng)絡(luò)連接可能導(dǎo)致頻繁的線程調(diào)度,從而消耗大量的系統(tǒng)額外時(shí)間,或者導(dǎo)致調(diào)度不及時(shí),導(dǎo)致連接請(qǐng)求沒有及時(shí)響應(yīng)和處理,最終導(dǎo)致線程池技術(shù)沒有發(fā)揮出預(yù)期的性能。如何設(shè)計(jì)服務(wù)器的線程池調(diào)度算法使其能夠盡可能發(fā)揮線程池的效能,是一個(gè)需要重點(diǎn)解決的問題。
創(chuàng)建和銷毀線程很費(fèi)時(shí),因?yàn)閯?chuàng)建一個(gè)線程要獲取內(nèi)存資源或者其他更多資源。因此,提高效率的一個(gè)手段是盡可能減少創(chuàng)建和銷毀對(duì)象的次數(shù),特別是一些耗資源的對(duì)象創(chuàng)建和銷毀。為了節(jié)省對(duì)象創(chuàng)建和銷毀所產(chǎn)生的系統(tǒng)時(shí)間,需要準(zhǔn)備一個(gè)容器用來保存一批這樣的對(duì)象。當(dāng)需要使用這種對(duì)象時(shí),不再需要每次去創(chuàng)建,而是直接從容器中取出現(xiàn)成的直接使用。由于節(jié)省了創(chuàng)建和銷毀對(duì)象所需的開銷,程序性能得以提升,而存放和管理這些線程對(duì)象的容器就是線程池[2]。
如圖1所示,一般簡(jiǎn)單線程池至少由以下3部分組成[2]。
圖1 線程池組成結(jié)構(gòu)
線程池管理器:也稱為主控線程,用于創(chuàng)建和管理線程池中的工作線程,定時(shí)對(duì)任務(wù)隊(duì)列掃描、清理過期未提交工作線程執(zhí)行的積壓數(shù)據(jù)。
工作線程:用于任務(wù)處理的獨(dú)立單元,并根據(jù)系統(tǒng)初始設(shè)定創(chuàng)建其數(shù)量,繁忙時(shí)會(huì)動(dòng)態(tài)創(chuàng)建新工作線程。
任務(wù)隊(duì)列:提供一種緩沖機(jī)制用于存放等待處理的任務(wù),工作線程根據(jù)相應(yīng)的原則從任務(wù)隊(duì)列中獲取數(shù)據(jù)處理。
線程池采用預(yù)創(chuàng)建的技術(shù),在應(yīng)用程序啟動(dòng)后,將立即創(chuàng)建一定數(shù)量的線程(N)放入空閑隊(duì)列中。這些線程處于阻塞狀態(tài),不消耗CPU,但占用較小的內(nèi)存空間。
線程池中線程的數(shù)目是動(dòng)態(tài)調(diào)整的。當(dāng)任務(wù)到來后將其存入任務(wù)隊(duì)列,線程池管理器選擇一個(gè)空閑線程,把任務(wù)傳入此線程中運(yùn)行。當(dāng)線程池中的所有線程都處于繁忙狀態(tài)時(shí),線程池自動(dòng)創(chuàng)建新線程處理更多的任務(wù);當(dāng)線程池比較空閑時(shí),線程池銷毀一部分空閑線程,釋放系統(tǒng)資源,只保留初始創(chuàng)建的N個(gè)線程[2]。
(1)可以控制產(chǎn)生線程的數(shù)量。通過預(yù)先創(chuàng)建一定數(shù)量的工作線程并限制其數(shù)量,控制線程對(duì)象的內(nèi)存消耗[3]。
(2)降低系統(tǒng)開銷和資源消耗[3]。通過對(duì)多個(gè)請(qǐng)求重用線程,線程創(chuàng)建、銷毀的開銷被分?jǐn)偟蕉鄠€(gè)請(qǐng)求上。另外,通過限制線程數(shù)量,降低線程池在垃圾回收方面的開銷。
(3)提高系統(tǒng)響應(yīng)速度。線程事先已被創(chuàng)建,任務(wù)到達(dá)時(shí)可直接進(jìn)行處理,消除了因線程創(chuàng)建所帶來的時(shí)間延遲。另外,多個(gè)線程可以并發(fā)處理[3]。
線程池技術(shù)解決了服務(wù)器多個(gè)線程執(zhí)行的調(diào)試問題,可以使處理器盡量保持忙碌狀態(tài),充分利用系統(tǒng)的可用資源,顯著提高系統(tǒng)性能。但是,如果線程池調(diào)度策略設(shè)計(jì)不當(dāng)也會(huì)事與愿違[4]。
可以通過以下2個(gè)實(shí)驗(yàn)測(cè)試線程池調(diào)度策略的參數(shù)取值對(duì)服務(wù)器性能和資源占用的影響。
假設(shè)并發(fā)用戶連接總數(shù)為T,線程池初始線程數(shù)N,每個(gè)線程處理最多M個(gè)用戶連接。當(dāng)有用戶連接請(qǐng)求時(shí),線程池會(huì)隨機(jī)選擇一個(gè)線程對(duì)該連接請(qǐng)求進(jìn)行處理。線程繁忙臨界點(diǎn)設(shè)為P(0%
如圖2所示,當(dāng)某一個(gè)工作線程的用戶連接數(shù)X=0時(shí),說明該線程處于空狀態(tài);當(dāng)用戶連接數(shù)X 圖2 工作線程的運(yùn)行狀態(tài) 線程池調(diào)度周期為t,當(dāng)所有工作線程處于忙狀態(tài)時(shí),線程池管理器會(huì)新創(chuàng)建一個(gè)線程并加入線程池。 以T=20 000、N=4、M=2 000、t=1 s為例,測(cè)試線程繁忙臨界點(diǎn)P在不同取值下的訪問完成時(shí)間和線程總數(shù)。 根據(jù)概率論與統(tǒng)計(jì)學(xué)原理,自然界很多看似沒有規(guī)律可尋的隨機(jī)事件其實(shí)服從正態(tài)分布[5]。 正態(tài)分布是一種自然分布,有極其廣泛的應(yīng)用背景。在生產(chǎn)和科學(xué)實(shí)驗(yàn)中,很多隨機(jī)變量的概率分布都可以近似用正態(tài)分布來表示。 如圖3所示,正態(tài)分布有2個(gè)參數(shù),即期望值和標(biāo)準(zhǔn)差,可記作N(μ,σ)。 圖3 正態(tài)分布 正態(tài)分布有如下特性: 假設(shè)在用戶訪問服務(wù)器的高峰時(shí)間段,用戶訪問總數(shù)為50萬,用戶訪問數(shù)量服從正態(tài)分布,如表1所示。 表1 高峰時(shí)間段訪問服務(wù)器的用戶數(shù) 測(cè)試線程繁忙臨界點(diǎn)P在取值30、60和90的情況下,高峰時(shí)段在各時(shí)間點(diǎn)的用戶完成數(shù)和耗時(shí)。 實(shí)驗(yàn)利用線程池方式實(shí)現(xiàn)的服務(wù)器做性能測(cè)試分析。服務(wù)器CPU為Intel Xeon 2.10 GHz雙核,內(nèi)存64 GB,操作系統(tǒng)Fedora Core 14。實(shí)驗(yàn)一的測(cè)試結(jié)果如表2所示。 表2 臨界點(diǎn)P對(duì)完成時(shí)間和線程數(shù)的影響 將表2中的臨界點(diǎn)P在不同取值下的完成時(shí)間轉(zhuǎn)換為圖4,將表2中的臨界點(diǎn)P在不同取值下的處理線程數(shù)轉(zhuǎn)換為圖5。 圖4 臨界點(diǎn)P在不同取值下的完成時(shí)間對(duì)比 圖5 臨界點(diǎn)P在不同取值下的線程數(shù)對(duì)比 綜合圖4和圖5可見,隨著臨界點(diǎn)P值的增大,用戶連接處理不及時(shí)的概率增加,導(dǎo)致用戶連接處理完成時(shí)間變長(zhǎng),降低了網(wǎng)絡(luò)服務(wù)器的性能。但是,如果臨界點(diǎn)P值設(shè)置過小,會(huì)在線程還未飽和的情況下提前創(chuàng)建新線程,導(dǎo)致線程數(shù)量增加,造成系統(tǒng)資源浪費(fèi)。 實(shí)驗(yàn)二的測(cè)試結(jié)果,如圖6、圖7所示。 分析圖6可知,在用戶訪問的高峰時(shí)間段,隨著臨界點(diǎn)P值的增大,服務(wù)器對(duì)高峰期用戶訪問請(qǐng)求的響應(yīng)速度變慢,未及時(shí)處理的用戶訪問請(qǐng)求會(huì)被延遲到高峰期后處理。 分析圖7可知,在用戶訪問的高峰時(shí)間段,隨著臨界點(diǎn)P值的增大,對(duì)高峰期用戶訪問請(qǐng)求的處理耗時(shí)會(huì)隨著用戶數(shù)的增加而增大,一旦到達(dá)服務(wù)器的處理極限后,會(huì)保持相同的處理耗時(shí)。結(jié)合圖6的分析可知,由于未及時(shí)處理的用戶訪問請(qǐng)求被延遲,所以處理耗時(shí)的下降拐點(diǎn)隨著臨界點(diǎn)P值的增大而延后。 圖6 臨界點(diǎn)P在不同取值下的用戶完成數(shù)對(duì)比 圖7 臨界點(diǎn)P在不同取值下的處理耗時(shí)對(duì)比 綜上所述,線程池模型主要是通過線程池管理器對(duì)線程池進(jìn)行并發(fā)調(diào)度。線程池管理器主要通過各個(gè)工作線程的負(fù)載情況和任務(wù)的優(yōu)先級(jí)別調(diào)度任務(wù),使得線程池工作更加靈活,處理任務(wù)更加及時(shí)、高效。但是,由于線程池的工作調(diào)度依賴于線程池管理器調(diào)度算法,所以線程池性能主要受到調(diào)度策略和調(diào)度參數(shù)的影響[6]。因此,不同的服務(wù)器需要根據(jù)應(yīng)用場(chǎng)景尋找最優(yōu)的線程池調(diào)度方案,使服務(wù)器性能與資源消耗達(dá)到平衡。 線程池技術(shù)為線程創(chuàng)建銷毀的開銷問題和系統(tǒng)資源不足的問題提供了一個(gè)較好的解決方案,尤其適用于大量用戶訪問請(qǐng)求的服務(wù)器應(yīng)用[7]。但是,要使線程池的處理效率更高,對(duì)線程池的調(diào)度是一個(gè)要考慮的問題,且調(diào)度策略和調(diào)度參數(shù)要根據(jù)實(shí)際應(yīng)用場(chǎng)景來設(shè)定。只有合理的線程池調(diào)度,才能發(fā)揮出線程池技術(shù)在服務(wù)器應(yīng)用中的最大效能。2.2 實(shí)驗(yàn)二
3 實(shí)驗(yàn)結(jié)果和分析
4 結(jié) 語