国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于國產(chǎn)化環(huán)境的線程池模型研究與實(shí)現(xiàn)

2020-01-07 02:45王韓波孫文俊
關(guān)鍵詞:設(shè)計(jì)模式空閑國產(chǎn)化

◆王韓波 孫文俊 林 鵬

基于國產(chǎn)化環(huán)境的線程池模型研究與實(shí)現(xiàn)

◆王韓波1孫文俊1林 鵬2

(1.中國電子科技集團(tuán)公司第二十八研究所 江蘇 210007;2.92020部隊(duì) 山東 266000)

為滿足面向服務(wù)化和大數(shù)據(jù)的大型企業(yè)級(jí)信息系統(tǒng)的高并發(fā)、高吞吐、安全性需求,也為適應(yīng)新形勢(shì)下國防網(wǎng)絡(luò)信息系統(tǒng)逐步向國產(chǎn)化自主平臺(tái)遷移的行業(yè)發(fā)展趨勢(shì),本文通過對(duì)常用線程池模型的比較研究,提出了固定無優(yōu)先級(jí)領(lǐng)導(dǎo)者/跟隨者線程池和動(dòng)態(tài)有優(yōu)先級(jí)半同步/半異步線程池模型,并提供基于銀河麒麟操作系統(tǒng)+飛騰CPU的國產(chǎn)自主環(huán)境的實(shí)現(xiàn)方案。

線程池模型;國產(chǎn)化環(huán)境;領(lǐng)導(dǎo)者/跟隨者;半同步/半異步

多線程技術(shù)主要分為兩種:在需要時(shí)進(jìn)行創(chuàng)建的經(jīng)典多線程處理方式和基于預(yù)創(chuàng)建的線程池處理方式[1]。經(jīng)典多線程是一種按需創(chuàng)建的機(jī)制,為每個(gè)請(qǐng)求創(chuàng)建獨(dú)立的線程進(jìn)行處理,邏輯簡單且可靠性高,適用于并發(fā)量少且不密集的應(yīng)用場景。一旦系統(tǒng)出現(xiàn)并發(fā)請(qǐng)求峰值時(shí),大量資源的創(chuàng)建和銷毀開銷將嚴(yán)重影響系統(tǒng)響應(yīng)能力。因此在高并發(fā)服務(wù)端使用場景下,基于預(yù)創(chuàng)建的線程池解決方案更為常見。

為滿足面向服務(wù)化和大數(shù)據(jù)的大型企業(yè)級(jí)業(yè)務(wù)信息系統(tǒng)的高并發(fā)、高吞吐需求,也為適應(yīng)國防信息安全領(lǐng)域逐步向國產(chǎn)化軟硬件平臺(tái)遷移的行業(yè)發(fā)展趨勢(shì),有必要基于國產(chǎn)化環(huán)境研究通用線程池技術(shù),探索其國產(chǎn)化平臺(tái)的實(shí)現(xiàn)方案,為未來國產(chǎn)化環(huán)境下如何提高系統(tǒng)效率尋找一種切實(shí)有效的解決方法。

1 線程池模型

對(duì)線程池的研究主要從三個(gè)方面進(jìn)行:一是線程池的大小設(shè)定;二是線程池的優(yōu)先級(jí)設(shè)定;三是線程池的設(shè)計(jì)模式。線程池大小設(shè)定影響線程池對(duì)系統(tǒng)資源的需求,按照線程池內(nèi)線程數(shù)量能否增減,可將線程池劃分為固定線程池和動(dòng)態(tài)線程池[2]。線程池優(yōu)先級(jí)設(shè)定通常有兩種類型,一是線程池中所有線程的優(yōu)先級(jí)別相同,即無通道模式;另一種是線程池中的線程有一定的優(yōu)先級(jí)別,即有通道的模式,線程池中不同的優(yōu)先級(jí)別對(duì)應(yīng)著線程不同的數(shù)據(jù)存儲(chǔ)方式,同時(shí)也影響者線程池大小[2]。線程池的常見設(shè)計(jì)模式則主要包括:半同步/半異步(Half-Sync/Half-Async)和領(lǐng)導(dǎo)者/跟隨者(Leader/Follower)兩種。文獻(xiàn)[3]深入分析了并發(fā)用戶數(shù)、請(qǐng)求處理時(shí)間和線程池中線程數(shù)對(duì)Half-Sync/Half-Async和Leader/Follower這兩種線程池設(shè)計(jì)模式對(duì)系統(tǒng)性能的影響,并在不同場景下對(duì)兩種設(shè)計(jì)模式的線程池性能表現(xiàn)做了比較。

通過分析常見大型業(yè)務(wù)信息系統(tǒng)多線程并發(fā)需求的特點(diǎn),文章選擇不同的線程池設(shè)計(jì)策略組合,提出以下兩種通用線程池模型:(1)固定無優(yōu)先級(jí)領(lǐng)導(dǎo)者/跟隨者線程池(本文簡稱簡單LF線程池);(2)動(dòng)態(tài)有優(yōu)先級(jí)半同步/半異步線程池(本文簡稱動(dòng)態(tài)HH線程池)。

1.1 簡單LF線程池模型

為了在簡單多任務(wù)并發(fā)處理的場景下,更好地利用多線程的并發(fā)優(yōu)勢(shì),降低程序的復(fù)雜度,提高產(chǎn)品的穩(wěn)定性,提出簡單LF線程池模型,如圖1所示。

簡單LF線程池的簡單主要指對(duì)線程池內(nèi)線程數(shù)量做固定設(shè)計(jì),線程間不區(qū)分優(yōu)先級(jí)按照先到先執(zhí)行原則進(jìn)行調(diào)度作業(yè)。LF是指線程池采用領(lǐng)導(dǎo)者/跟隨者(Leader/Follower)的設(shè)計(jì)模式,由領(lǐng)導(dǎo)者(leader)線程負(fù)責(zé)線程池請(qǐng)求事件監(jiān)聽和消息分離,并從跟隨者(follower)中遴選新的領(lǐng)導(dǎo)者線程,然后自己以執(zhí)行線程(processor)的身份去處理相關(guān)事件,直到本次請(qǐng)求處理完畢后恢復(fù)為follower線程并等待重新被遴選為leader線程。其中l(wèi)eader線程的挑選方式,可根據(jù)實(shí)際情況決定,通常采用先進(jìn)先出、隨機(jī)指定等簡單原則。

圖1 簡單LF線程池模型

簡單LF線程池模型設(shè)計(jì)簡單、成熟度高、運(yùn)行穩(wěn)定,但在大量負(fù)載動(dòng)態(tài)變化或線程任務(wù)存在不同實(shí)時(shí)性要求的情況下并不適用。由于空閑線程不會(huì)被銷毀,在用戶的并發(fā)需求較低時(shí),線程池仍維持著為正常運(yùn)行設(shè)計(jì)的線程數(shù),將會(huì)造成大量的系統(tǒng)資源浪費(fèi);而當(dāng)用戶請(qǐng)求峰值出現(xiàn)時(shí),線程池?zé)o法提供更多的工作線程,使得用戶請(qǐng)求大量積壓甚至超時(shí)失效,從而造成系統(tǒng)響應(yīng)能力的進(jìn)一步惡化。此外線程池中的線程優(yōu)先級(jí)全部相同,高負(fù)載環(huán)境下大量普通非實(shí)時(shí)任務(wù)會(huì)搶占過多的處理器資源,實(shí)時(shí)任務(wù)卻無法得到及時(shí)處理。

1.2 動(dòng)態(tài)HH線程池模型

簡單LF線程池模型由于缺乏靈活性和優(yōu)先級(jí)考慮,難以滿足強(qiáng)實(shí)時(shí)數(shù)據(jù)處理和復(fù)雜多任務(wù)調(diào)度的實(shí)際要求,如實(shí)時(shí)情報(bào)處理軟件和高并發(fā)服務(wù)網(wǎng)關(guān)等。為滿足高并發(fā)場景下的使用需求,在常規(guī)線程池的基礎(chǔ)上對(duì)線程池的線程數(shù)量、優(yōu)先級(jí)、調(diào)度機(jī)制等進(jìn)行設(shè)計(jì)優(yōu)化,提出動(dòng)態(tài)HH線程池模型,如圖2所示。

圖2 動(dòng)態(tài)HH線程池模型

動(dòng)態(tài)HH線程池模型的動(dòng)態(tài)性體現(xiàn)在兩個(gè)方面:(1)支持線程數(shù)量的動(dòng)態(tài)調(diào)整,通過初始化線程池為一個(gè)預(yù)先設(shè)定的固定大小,再根據(jù)實(shí)際需求動(dòng)態(tài)增減臨時(shí)線程的數(shù)量,提供動(dòng)態(tài)伸縮的線程池并發(fā)處理能力。(2)支持線程優(yōu)先級(jí)的動(dòng)態(tài)設(shè)定,通過等待處理的任務(wù)優(yōu)先級(jí)動(dòng)態(tài)指定處理線程的優(yōu)先級(jí),支持實(shí)時(shí)任務(wù)獲得更多處理能力。

動(dòng)態(tài)HH線程池模型參考CORBA標(biāo)準(zhǔn)(簡稱RT-CORBA),RT-CORBA提供了半同步/半異步(Half-Sync/Half-Async)線程池的設(shè)計(jì)模式。Half-Sync/Half-Async將同步模式與異步模式相結(jié)合,異步層完成數(shù)據(jù)的I/O操作,提高系統(tǒng)整體I/O效率,同步層進(jìn)行業(yè)務(wù)的請(qǐng)求處理,降低線程池復(fù)雜度,通過優(yōu)先級(jí)消息隊(duì)列來完成數(shù)據(jù)交互。

2 線程池實(shí)現(xiàn)

目前常見的國產(chǎn)化基礎(chǔ)軟件環(huán)境包括以中標(biāo)、銀河麒麟操作系統(tǒng)為代表的國產(chǎn)操作系統(tǒng),以武漢達(dá)夢(mèng)、人大金倉為代表的國產(chǎn)數(shù)據(jù)庫管理系統(tǒng),國產(chǎn)化基礎(chǔ)硬件環(huán)境包括基于龍芯、飛騰CPU解決方案的各類終端和服務(wù)器設(shè)備[4]。本文僅以“銀河麒麟操作系統(tǒng)+飛騰CPU”的國產(chǎn)化解決方案為例,討論簡單LF線程池模型和動(dòng)態(tài)HH線程池模型的實(shí)現(xiàn)方案。但實(shí)際上以指揮信息系統(tǒng)為例,今后將會(huì)相當(dāng)長的一段時(shí)期內(nèi),同時(shí)在Windows、Unix、銀河麒麟等多種操作系統(tǒng)上運(yùn)行。盡管各操作系統(tǒng)的實(shí)現(xiàn)方案會(huì)存在種種細(xì)節(jié)方面的不同(如:pthread和solaris thread,epoll、kqueue和iocp等),但是簡單LF線程池模型和動(dòng)態(tài)HH線程池模型的運(yùn)作機(jī)理不會(huì)改變。

2.1 簡單LF線程池實(shí)現(xiàn)

簡單LF線程池使用Reactor設(shè)計(jì)模式來實(shí)現(xiàn)事件的多路分離,很多高性能網(wǎng)絡(luò)應(yīng)用如Netty、Redis均在使用類似的IO方式。其中事件源和分離機(jī)制采用銀河麒麟操作系統(tǒng)中最常用的fd_set 和select 系統(tǒng)調(diào)用。簡單LF線程池模型的實(shí)現(xiàn)類圖如圖3 所示。

簡單LF線程池模型將請(qǐng)求的I/O處理部分封裝為統(tǒng)一的事件回調(diào)接口,任意時(shí)刻只有l(wèi)eader線程負(fù)責(zé)響應(yīng)I/O句柄事件,不再是一對(duì)一的經(jīng)典I/O響應(yīng)機(jī)制,其他follower線程將處于靜默等待狀態(tài)。線程間使用信號(hào)量作為同步機(jī)制,所有follower 線程阻塞在同一個(gè)LF選主信號(hào)量上等待,直到當(dāng)前l(fā)eader線程釋放出下一輪選主通知。

2.2 動(dòng)態(tài)HH線程池實(shí)現(xiàn)

動(dòng)態(tài)HH線程池的異步層負(fù)責(zé)I/O層事件監(jiān)聽,使用Reactor 模式實(shí)現(xiàn)異步層事件派分,在完成消息提取后放入到線程池消息隊(duì)列等待處理??紤]到銀河麒麟操作系統(tǒng)是基于Linux內(nèi)核實(shí)現(xiàn),選用更高效的epoll系統(tǒng)調(diào)用實(shí)現(xiàn)高效的事件通知機(jī)制,使用fd_set 數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)事件源。線程池的同步層和消息隊(duì)列使用主動(dòng)對(duì)象(Active-Object)設(shè)計(jì)模式來實(shí)現(xiàn),主動(dòng)對(duì)象模式抽象并發(fā)任務(wù)為邏輯請(qǐng)求對(duì)象,通過異步編程的方法調(diào)用(Method Invocation)和方法執(zhí)行(Method Execution)的分離設(shè)計(jì),實(shí)現(xiàn)動(dòng)態(tài)HH線程池請(qǐng)求提取和請(qǐng)求處理在不同的線程中執(zhí)行,最終完成同步層和異步層的分離。動(dòng)態(tài)HH線程池的實(shí)現(xiàn)類圖如圖4所示。

常見的動(dòng)態(tài)線程池大小調(diào)整方案有兩種:一是閾值觸發(fā)式調(diào)整,二是公式預(yù)測(cè)式調(diào)整。閾值觸發(fā)式指按照預(yù)先設(shè)定的線程池參數(shù)來控制線程池的擴(kuò)展和收縮行為,簡單易實(shí)現(xiàn)且維護(hù)性開銷小,但線程池參數(shù)需要精確地校正,否則會(huì)導(dǎo)致系統(tǒng)性能下降;公式預(yù)測(cè)式指通過經(jīng)驗(yàn)公式來預(yù)測(cè)未來線程池的最優(yōu)大小,往往更能反映業(yè)務(wù)系統(tǒng)運(yùn)行中資源消耗的真實(shí)情況,并根據(jù)統(tǒng)計(jì)學(xué)原理快速調(diào)整線程池規(guī)模,但通用性較差,需要較大的資源狀態(tài)采集、統(tǒng)計(jì)和預(yù)測(cè)動(dòng)作的開銷。

圖3 簡單LF線程池實(shí)現(xiàn)類圖

圖4 動(dòng)態(tài)HH線程池實(shí)現(xiàn)類圖

為保證動(dòng)態(tài)HH線程池在不同使用場景下的適用性,文中采用了第一種調(diào)整方案,并支持閾值參數(shù)的可調(diào)整。假設(shè)線程池最大線程數(shù)量為T_MAX,最小為T_MIN,單次可調(diào)整線程數(shù)為T_NUM,最小空閑數(shù)量為T_IMIN,最大為T_IMAX。動(dòng)態(tài)HH線程池的線程池大小動(dòng)態(tài)調(diào)整策略如下:

(1)首先建立線程池,創(chuàng)建T_MIN個(gè)初始線程;

(2)當(dāng)線程池中空閑線程數(shù)低于T_IMIN時(shí),觸發(fā)線程池動(dòng)態(tài)擴(kuò)張機(jī)制,創(chuàng)建并添加T_NUM個(gè)空閑線程;

(3)當(dāng)線程池中空閑線程數(shù)高于T_IMAX時(shí),觸發(fā)線程池動(dòng)態(tài)收縮機(jī)制,回收并刪除T_NUM個(gè)空閑線程;

(4)線程池動(dòng)態(tài)調(diào)整過程中,保證線程池中線程數(shù)量不超過T_MAX也不低于T_MIN;

(5)若線程池已達(dá)最大限制且無空閑線程可用時(shí),任務(wù)請(qǐng)求將被存入緩沖隊(duì)列,等待空閑線程出現(xiàn)并處理。

以上參數(shù)的合理設(shè)置可以保證任意時(shí)刻系統(tǒng)均具有一定的并發(fā)請(qǐng)求響應(yīng)能力,緩沖區(qū)的存在也在一定程度上降低了動(dòng)態(tài)調(diào)整或瞬間峰值過程中任務(wù)丟失的可能性。

3 結(jié)束語

為滿足面向服務(wù)化和大數(shù)據(jù)的大型企業(yè)級(jí)信息系統(tǒng)的高并發(fā)、高吞吐需求,以及國產(chǎn)化發(fā)展趨勢(shì),本文提出一組適用于常見的業(yè)務(wù)信息系統(tǒng)需求的線程池模型,并提供了基于銀河麒麟操作系統(tǒng)+飛騰CPU國產(chǎn)化自主環(huán)境的實(shí)現(xiàn)方案。通過實(shí)際的項(xiàng)目試用過程中發(fā)現(xiàn),簡單LF線程池和動(dòng)態(tài)HH線程池能夠很好解決常見的信息系統(tǒng)并發(fā)需求。后續(xù)在此研究基礎(chǔ)上封裝跨平臺(tái)的多線程開發(fā)基礎(chǔ)支撐庫,以達(dá)到減少開發(fā)人員日后遷移工作量、提高代碼復(fù)用率、提升程序魯棒性和降低軟件維護(hù)成本的目的。

[1]唐富強(qiáng),于鴻洋,張萍.Linux下通用線程池的改進(jìn)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2012.

[2]聶蘭蘭.考慮外界影響因子的動(dòng)態(tài)線程池優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2014.

[3]李剛,金蓓弘.兩種線程池的實(shí)現(xiàn)和性能評(píng)價(jià)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007.

[4]陳奡,王超,張永等.國產(chǎn)化Web信息系統(tǒng)性能評(píng)估模型與優(yōu)化方法[J].指揮信息系統(tǒng)與技術(shù),2015.

[5]趙海,李志蜀,韓學(xué)為等.線程池的優(yōu)化設(shè)計(jì)[J].四川大學(xué)學(xué)報(bào)(自然科學(xué)版),2005.

[6]劉云生,王剛,王衛(wèi)國.實(shí)時(shí)線程池性能研究與動(dòng)態(tài)優(yōu)化[J].計(jì)算機(jī)工程與科學(xué),2007.

[7]謝宙宇,臧飛.基于國產(chǎn)軟硬件的信息系統(tǒng)性能優(yōu)化技術(shù)[J].指揮信息系統(tǒng)與技術(shù),2014.

猜你喜歡
設(shè)計(jì)模式空閑國產(chǎn)化
元器件國產(chǎn)化推進(jìn)工作實(shí)踐探索
設(shè)計(jì)模式識(shí)別的特征信息分類研究
“1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
LNG接收站擴(kuò)建工程低壓泵國產(chǎn)化應(yīng)用管理
ASM-600油站換熱器的國產(chǎn)化改進(jìn)
智慧圖書館環(huán)境下的融貫式服務(wù)設(shè)計(jì)模式研究
三維協(xié)同設(shè)計(jì)模式下的航天項(xiàng)目管理實(shí)踐與展望
“鳥”字謎
面向國產(chǎn)化的MCU+FPGA通用控制器設(shè)計(jì)
西灣村采風(fēng)