亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種消息線程掛起時(shí)間的動(dòng)態(tài)調(diào)節(jié)方法與流程

文檔序號(hào):11406823閱讀:769來源:國(guó)知局

本發(fā)明涉及消息處理線程,尤其涉及消息線程掛起時(shí)間的動(dòng)態(tài)調(diào)節(jié)。



背景技術(shù):

消息處理線程,即連續(xù)不斷地通過消息循環(huán)進(jìn)行接收消息再進(jìn)行處理的線程。由于cpu資源有限,一個(gè)線程不能一直占用cpu,因此線程在處理完一個(gè)消息后,需要掛起,即掛起線程,讓其他同優(yōu)先級(jí)線程有機(jī)會(huì)獲取cpu。如此便需要設(shè)置一個(gè)合理的線程掛起時(shí)間,該時(shí)間不宜過短或過長(zhǎng)。若掛起時(shí)間過短,浪費(fèi)cpu,且會(huì)導(dǎo)致其他線程很難搶占cpu;若時(shí)間過長(zhǎng),可能導(dǎo)致急需處理的消息需要等待較長(zhǎng)時(shí)間,從而達(dá)不到性能要求,以至于出現(xiàn)隊(duì)列消息積壓的情況發(fā)生。

既有的處理方式為根據(jù)經(jīng)驗(yàn)估算或試驗(yàn)一個(gè)恒定線程掛起時(shí)間,保證處理速率大于接收速率。但是,如果設(shè)計(jì)改變,這個(gè)值可能需要重新估算并測(cè)試,并且,估測(cè)值沒有度量方法用于評(píng)價(jià)線程分配的掛起時(shí)間是否合理,是否符合設(shè)計(jì)要求(例如響應(yīng)時(shí)間要求)。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的為提供一種消息線程掛起時(shí)間動(dòng)態(tài)調(diào)節(jié)的方法,使線程的消息處理時(shí)間與掛起時(shí)間盡可能達(dá)到平衡,即以不影響線程處理消息的效率為前提,使線程掛起時(shí)間盡可能長(zhǎng),以減少cpu占用時(shí)間片,提高cpu的利用率,不依賴于人工估算及降低測(cè)試成本。

為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種消息線程掛起時(shí)間的動(dòng)態(tài)調(diào)節(jié)方法,其特征在于,所述方法包括以下步驟:

1)設(shè)ts為線程休眠時(shí)間,單位ms;

2)令發(fā)送消息至隊(duì)列的頻率小于從隊(duì)列中獲取消息處理的頻率:

f1<=f2

f2=1000/(ta+ts)

其中:f1為消息發(fā)送頻率,即每秒發(fā)送至消息隊(duì)列的消息個(gè)數(shù);

f2為消息處理頻率,即每秒從消息隊(duì)列中處理消息個(gè)數(shù);

3)消息處理不超過允許的消息響應(yīng)時(shí)間,即消息隊(duì)列中最后一個(gè)消息的處理時(shí)間達(dá)到響應(yīng)時(shí)間要求,則所有消息都滿足響應(yīng)時(shí)間要求,需要滿足如下條件:

td>=n*(ts+ta)

n<=q

td為允許一個(gè)消息的最大響應(yīng)時(shí)間(從消息被放入隊(duì)列,到最后被處理完成),單位毫秒。

n為消息隊(duì)列中緩存的消息個(gè)數(shù);

q為消息隊(duì)列最大緩存容量;

4)令線程休眠一段時(shí)間后才能繼續(xù)處理消息,并設(shè)置一個(gè)線程的最小休眠時(shí)間;

ts>=tsmin

5)設(shè)置一個(gè)線程的最長(zhǎng)休眠時(shí)間;

ts<=tsmax

6)對(duì)上述步驟進(jìn)行整理,結(jié)果如下:

tsmin_r<=ts<=tsmax_r

tsmin_r=max(td/q–ts,tsmin)

tsmax_r=min(1000/f1–ta,td/n–ta,tsmax)

以上可知,當(dāng)ts=tsmax_r時(shí)線程休眠時(shí)間使最長(zhǎng)的。

在一個(gè)實(shí)施例中,ts是求解變量,q、tsmin、tsmax、td是常量,f1,n,ta為變量。

在一個(gè)實(shí)施例中,當(dāng)消息發(fā)送頻率在增大時(shí),f1=單位時(shí)間內(nèi)線程處理的消息個(gè)數(shù)+隊(duì)列中新增消息個(gè)數(shù);當(dāng)消息發(fā)送頻率在減小時(shí),f1=單位時(shí)間內(nèi)線程處理的消息個(gè)數(shù)-隊(duì)列中減少消息個(gè)數(shù)。

在一個(gè)實(shí)施例中,n通過api可以獲得。

在一個(gè)實(shí)施例中,n通過ats系統(tǒng)中通過mtm的osqueryqueue接口獲得。

本發(fā)明具有以下有益技術(shù)效果:

首先,本發(fā)明實(shí)現(xiàn)了線程掛起時(shí)間的自動(dòng)調(diào)節(jié),節(jié)約不必要的cpu占用時(shí)間,提高cpu利用率,且不影響消息線程執(zhí)行的性能。

其次,本發(fā)明在線程代碼、過程被修改時(shí)不必重新估算、修改掛起時(shí)間,即可實(shí)現(xiàn)線程掛起時(shí)間最優(yōu)。

再次,本發(fā)明為線程分配的休眠時(shí)間合理性提供了一種評(píng)估方法。

附圖說明

本發(fā)明的以上發(fā)明內(nèi)容以及下面的具體實(shí)施方式在結(jié)合附圖閱讀時(shí)會(huì)得到更好的理解。需要說明的是,附圖僅作為所請(qǐng)求保護(hù)的發(fā)明的示例。在附圖中,相同的附圖標(biāo)記代表相同或類似的元素。

圖1示出常規(guī)的消息處理線程處理消息的流程圖。

具體實(shí)施方式

以下在具體實(shí)施方式中詳細(xì)敘述本發(fā)明的詳細(xì)特征以及優(yōu)點(diǎn),其內(nèi)容足以使任何本領(lǐng)域技術(shù)人員了解本發(fā)明的技術(shù)內(nèi)容并據(jù)以實(shí)施,且根據(jù)本說明書所揭露的說明書、權(quán)利要求及附圖,本領(lǐng)域技術(shù)人員可輕易地理解本發(fā)明相關(guān)的目的及優(yōu)點(diǎn)。

圖1示出常規(guī)的消息處理線程處理消息的流程圖。

步驟101:線程開始運(yùn)行;

步驟102:每次循環(huán)都會(huì)判斷是否滿足線程退出條件。如線程不退出,即不滿足線程退出條件,則進(jìn)行至步驟103,否則進(jìn)行步驟107退出消息循環(huán)結(jié)束線程;

步驟103:判斷隊(duì)列中是否有消息,有則進(jìn)行步驟104,否則進(jìn)行步驟106掛起;

步驟104:從消息隊(duì)列中取出消息

步驟105:調(diào)用消息處理函數(shù)處理消息,此步驟可以按照需求省略;

步驟106:線程掛起,調(diào)用sleep函數(shù),釋放cpu控制權(quán);

步驟107:結(jié)束線程。

本發(fā)明所改進(jìn)的為步驟106,盡可能延長(zhǎng)線程掛起時(shí)間,也就是使系統(tǒng)函數(shù)sleep(n)中的n達(dá)到數(shù)學(xué)模型中的最大化。

在一個(gè)實(shí)施例中,數(shù)學(xué)模型可以按以下建立。

1)設(shè)ts為線程休眠時(shí)間,單位ms,本發(fā)明目標(biāo)為獲取休眠時(shí)間的最大值。

2)發(fā)送消息至隊(duì)列的頻率必須小于從隊(duì)列中獲取消息處理的頻率,否則在一段時(shí)間后,隊(duì)列滿,將導(dǎo)致消息丟失。因此,需要滿足如下:

f1<=f2

f2=1000/(ta+ts)

其中:f1為消息發(fā)送頻率,即每秒發(fā)送至消息隊(duì)列的消息個(gè)數(shù);

f2為消息處理頻率,即每秒從消息隊(duì)列中處理消息個(gè)數(shù);

ta為消息隊(duì)列中一個(gè)消息被平均處理時(shí)間,不含線程休眠時(shí)間。單位毫秒。

3)消息處理不能超過允許的消息響應(yīng)時(shí)間,否則無法滿足系統(tǒng)性能要求。

根據(jù)假設(shè),可以認(rèn)為消息隊(duì)列中最后一個(gè)消息的處理時(shí)間達(dá)到響應(yīng)時(shí)間要求(即消息處理時(shí)間最差的情況),則所有消息都滿足響應(yīng)時(shí)間要求,因此需要滿足如下:

td>=n*(ts+ta)

n<=q

td為允許一個(gè)消息的最大響應(yīng)時(shí)間(從消息被放入隊(duì)列,到最后被處理完成),單位毫秒。

n為消息隊(duì)列中緩存的消息個(gè)數(shù);

q為消息隊(duì)列最大緩存容量。

4)線程必須休眠一段時(shí)間后才能繼續(xù)處理消息,否則其他線程很難獲取時(shí)間片,從而影響整體性能。

如果僅考慮1)和2),在高響應(yīng)時(shí)間要求下,可能導(dǎo)致線程休眠時(shí)間極短,這將導(dǎo)致線程為盡可能快的處理消息,過多占有cpu,從而影響其他線程的響應(yīng)時(shí)間,因此必須規(guī)定一個(gè)線程的最小休眠時(shí)間。

ts>=tsmin

5)線程休眠時(shí)間不能過長(zhǎng),否則可能導(dǎo)致消息積壓從而達(dá)不到響應(yīng)時(shí)間甚至隊(duì)列滿。

考慮消息發(fā)送可能是一批一批的,此時(shí)如果線程在處理完一批消息后開始較長(zhǎng)時(shí)間休眠,結(jié)果由于休眠時(shí)間過長(zhǎng),在休眠期發(fā)送方發(fā)送了兩批消息,結(jié)果消息積壓,響應(yīng)延遲,因此必須規(guī)定一個(gè)線程的最長(zhǎng)休眠時(shí)間。

ts<=tsmax

綜上所述,計(jì)算模型如下:

f1<=f2

f2=1000/(ta+ts)

td>=n*(ts+ta)

n<=q

tsmax>=ts>=tsmin

對(duì)模型進(jìn)行整理,結(jié)果如下:

ts<=1000/f1–ta

ts<=td/n–ta

ts>=td/q–ts

tsmax>=ts>=tsmin

對(duì)模型進(jìn)一步整理,結(jié)果如下:

tsmin_r<=ts<=tsmax_r

tsmin_r=max(td/q–ts,tsmin)

tsmax_r=min(1000/f1–ta,td/n–ta,tsmax)

以上可知,當(dāng)ts=tsmax_r時(shí)線程休眠時(shí)間使最長(zhǎng)的。

模型中,ts是求解變量,q、tsmin、tsmax、td是常量,f1,n,ta為變量,需要統(tǒng)計(jì)賦值。以下分別給出各個(gè)變量的統(tǒng)計(jì)方法:

f1->消息發(fā)送頻率;

當(dāng)發(fā)送頻率在增大時(shí),f1=單位時(shí)間內(nèi)線程處理的消息個(gè)數(shù)+隊(duì)列中新增消息個(gè)數(shù);

當(dāng)發(fā)送頻率在減小時(shí),f1=單位時(shí)間內(nèi)線程處理的消息個(gè)數(shù)-隊(duì)列中減少消息個(gè)數(shù);

n->隊(duì)列中緩存消息個(gè)數(shù),通過apiapplication可以得知,例如自動(dòng)列車監(jiān)控系統(tǒng)系統(tǒng)中通過自主開發(fā)的底層庫(mtm,內(nèi)含隊(duì)列(池)操作的封裝)的osqueryqueue(獲取隊(duì)列緩存?zhèn)€數(shù)的函數(shù))接口獲得;其中,apiapplication一般指軟件開發(fā)調(diào)用的庫函數(shù);

ta->消息隊(duì)列中一個(gè)消息被平均處理時(shí)間,不含線程休眠時(shí)間。單位毫秒。

在一個(gè)實(shí)施例中,以下是軟件實(shí)現(xiàn)方法的關(guān)鍵算法。

根據(jù)數(shù)學(xué)模型,封裝sleep方法,具體實(shí)現(xiàn)如下:

nsleeptime即為計(jì)算所得最長(zhǎng)休眠時(shí)間,在消息循環(huán)掛起調(diào)用sleep時(shí)使用nsleeptime即可達(dá)到期望效果。

在一個(gè)實(shí)施例中,調(diào)用算法如下:

//計(jì)算最佳掛起時(shí)間

intnsleeptime=calcsleeptime();

//線程掛起

sleep(nsleeptime);

在一個(gè)實(shí)施例中,完整的消息循環(huán)調(diào)用示例

//消息線程函數(shù)示例

inttreadfun(wparamwparam,lparamlparam)

{

本領(lǐng)域技術(shù)人員應(yīng)該理解,在了解了本發(fā)明的大致原理后,在不脫離該大致原理的情況下,存在變型后的數(shù)學(xué)模型亦能使得線程掛起時(shí)間更合理。進(jìn)一步,線程示例中所使用的函數(shù)可替換為具有類似掛起功能的其他系統(tǒng)函數(shù)或庫函數(shù)。

這里采用的術(shù)語和表述方式只是用于描述,本發(fā)明并不應(yīng)局限于這些術(shù)語和表述。使用這些術(shù)語和表述并不意味著排除任何示意和描述(或其中部分)的等效特征,應(yīng)認(rèn)識(shí)到可能存在的各種修改也應(yīng)包含在權(quán)利要求范圍內(nèi)。其他修改、變化和替換也可能存在。相應(yīng)的,權(quán)利要求應(yīng)視為覆蓋所有這些等效物。

如本申請(qǐng)和權(quán)利要求書中所示,除非上下文明確提示例外情形,“一”、“一個(gè)”、“一種”和/或“該”等詞并非特指單數(shù),也可包括復(fù)數(shù)。一般說來,術(shù)語“包括”與“包含”僅提示包括已明確標(biāo)識(shí)的步驟和元素,而這些步驟和元素不構(gòu)成一個(gè)排它性的羅列,方法或者設(shè)備也可能包含其他的步驟或元素。

同時(shí),本申請(qǐng)使用了特定詞語來描述本申請(qǐng)的實(shí)施例。如“一個(gè)實(shí)施例”、“一實(shí)施例”、和/或“一些實(shí)施例”意指與本申請(qǐng)至少一個(gè)實(shí)施例相關(guān)的某一特征、結(jié)構(gòu)或特點(diǎn)。因此,應(yīng)強(qiáng)調(diào)并注意的是,本說明書中在不同位置兩次或多次提及的“一實(shí)施例”或“一個(gè)實(shí)施例”或“一替代性實(shí)施例”并不一定是指同一實(shí)施例。此外,本申請(qǐng)的一個(gè)或多個(gè)實(shí)施例中的某些特征、結(jié)構(gòu)或特點(diǎn)可以進(jìn)行適當(dāng)?shù)慕M合。

同樣,需要指出的是,雖然本發(fā)明已參照當(dāng)前的具體實(shí)施例來描述,但是本技術(shù)領(lǐng)域中的普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到,以上的實(shí)施例僅是用來說明本發(fā)明,在沒有脫離本發(fā)明精神的情況下還可做出各種等效的變化或替換,因此,只要在本發(fā)明的實(shí)質(zhì)精神范圍內(nèi)對(duì)上述實(shí)施例的變化、變型都將落在本申請(qǐng)的權(quán)利要求書的范圍內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1