專利名稱:一種線程喚醒控制方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別是涉及一種線程喚醒控制方法和系統(tǒng)。
技術(shù)背景線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自 己不擁有系統(tǒng)資源,只擁有部分在運(yùn)行中必不可少的資源,但它可與同屬一個(gè) 進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè) 線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約, 致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程具有就緒、阻塞和運(yùn)行三種基本狀態(tài)。 線程是程序中一個(gè)單一的順序控制流,它很好的解決了緊耦合共享主存的多處 理機(jī)體系結(jié)構(gòu)上的并行處理行為。線程休眠是指線程處于不可運(yùn)行狀態(tài),在待 定時(shí)間或事件激活后再恢復(fù)運(yùn)行。現(xiàn)有系統(tǒng)觸發(fā)執(zhí)行底層服務(wù)線程, 一般有兩種方式 一種是被動(dòng)式觸發(fā)執(zhí)行外界達(dá)到一定條件時(shí),觸發(fā)執(zhí)行服務(wù)線程,以執(zhí) 行所需服務(wù)。另一種是主動(dòng)式觸發(fā)執(zhí)行,設(shè)置固定的時(shí)間間隔,每間隔指定的時(shí)間后, 都會(huì)去觸發(fā)服務(wù)線程,以執(zhí)行所需服務(wù)。上面所述兩種觸發(fā)執(zhí)行底層服務(wù)線程的方式有如下不足對(duì)于被動(dòng)式觸發(fā)執(zhí)行每次需要外界達(dá)到一定條件,才能觸發(fā)執(zhí)行服務(wù)線 程,系統(tǒng)無法做到主動(dòng)的操控,這種方式,只適合于系統(tǒng)完全不需要進(jìn)行調(diào)節(jié), 只進(jìn)行被動(dòng)調(diào)用的簡(jiǎn)單場(chǎng)景,在多數(shù)復(fù)雜業(yè)務(wù)場(chǎng)景下都不能滿足業(yè)務(wù)的需求。對(duì)于設(shè)置固定的時(shí)間間隔主動(dòng)式觸發(fā)執(zhí)行,系統(tǒng)能在指定時(shí)間間隔后主動(dòng) 的觸發(fā)服務(wù)線程。這種方式系統(tǒng)雖然取得主動(dòng),但往往還不夠合理,當(dāng)服務(wù)線 程的觸發(fā)不是很有規(guī)律,有某個(gè)時(shí)間段內(nèi)需要觸發(fā)的服務(wù)線程特別多,而在某 個(gè)時(shí)間段內(nèi)需要觸發(fā)的服務(wù)線程特別少時(shí),采用這種設(shè)置固定的時(shí)間間隔主動(dòng) 式觸發(fā)執(zhí)行服務(wù)線程的方式也不能很好的滿足,特別的,在觸發(fā)服務(wù)線程少的 時(shí)間段內(nèi)會(huì)造成系統(tǒng)資源的大量浪費(fèi)。在現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景中,經(jīng)常隨著不同的條 件,在不同時(shí)間去觸發(fā)服務(wù)線程。尤其當(dāng)系統(tǒng)對(duì)于性能比較關(guān)注,或者服務(wù)線
程比較耗費(fèi)資源時(shí),這種固定時(shí)間間隔調(diào)度服務(wù)線程的方式并不合理,浪費(fèi)了 大量的系統(tǒng)資源。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種線程喚醒控制的方法和系統(tǒng),對(duì)服 務(wù)線程以科學(xué)的方式主動(dòng)進(jìn)行觸發(fā)、休眠,從而合理的^f吏用系統(tǒng)資源,避免不 必要的系統(tǒng)資源的耗費(fèi)。為了解決上述問題,本發(fā)明公開了一種線程喚醒控制方法,包括 根據(jù)待執(zhí)行任務(wù)的頻率動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔; 線程喚醒運(yùn)行; 檢測(cè)是否有待處理任務(wù);當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完畢后進(jìn)入下一 步;當(dāng)檢測(cè)到?jīng)]有待處理任務(wù)時(shí)則直接進(jìn)入下 一步;置線程的休眠時(shí)間為所述動(dòng)態(tài)預(yù)置的喚醒線程的時(shí)間間隔。 優(yōu)選的,所述動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔為任意時(shí)間間隔。 優(yōu)選的,所述動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔為固定時(shí)間間隔的倍數(shù)。 本發(fā)明還公開了另一種線程喚醒控制方法,包括 線程喚醒運(yùn)行; 檢測(cè)是否有待處理任務(wù);當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完所述待處理任務(wù) 后線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間間隔At,否則;計(jì)算最近兩次休眠的時(shí)間間隔之和Aat,置線程休眠的時(shí)間間隔為Aat。其中,當(dāng)線程第一次休眠時(shí),所述最近兩次休眠的時(shí)間間隔之和Aat為預(yù) 置的最小單元時(shí)間間隔At。當(dāng)線程第二次休眠時(shí),所述最近兩次休眠的時(shí)間間隔都為預(yù)置的最小單元 時(shí)間間隔At,所述最近兩次休眠的時(shí)間間隔之和Aat為2At。優(yōu)選的,還包括預(yù)置最大時(shí)間間隔AT,當(dāng)最近兩次休眠的時(shí)間間隔之和Aat超出所述預(yù) 設(shè)的最大時(shí)間間隔AT時(shí),則所述線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間 間隔At。
本發(fā)明還公開了一種線程喚醒控制系統(tǒng),包括 線程喚醒單元,用于線程喚醒運(yùn)4亍; 任務(wù)檢測(cè)單元,用于檢測(cè)是否有待處理任務(wù); 任務(wù)處理單元,用于完成待處理^f壬務(wù)的處理; 休眠時(shí)間動(dòng)態(tài)重置單元,用于動(dòng)態(tài)重置線程的休眠時(shí)間。 本發(fā)明還公開了另 一種線程喚醒控制系統(tǒng),包括 線程喚醒單元,用于線程喚醒運(yùn)行; 任務(wù)檢測(cè)單元,用于檢測(cè)是否有待處理任務(wù); 任務(wù)處理單元,用于完成待處理任務(wù)的處理;休眠時(shí)間重置單元,當(dāng)檢測(cè)單元檢測(cè)到有待處理任務(wù)時(shí)則在處理單元處理 完所述待處理任務(wù)后重置線程的休眠時(shí)間為預(yù)置的最小單元時(shí)間間隔At,否 則;置線程〗木眠的時(shí)間間隔為最近兩次休眠的時(shí)間間隔之和Aat。 優(yōu)選的,所述系統(tǒng)還包括判斷單元,用于判斷最近兩次休眠的時(shí)間間隔之和Aat是否超出預(yù)設(shè)的最 大時(shí)間間隔AT。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)本發(fā)明所述方案采用主動(dòng)式觸發(fā)執(zhí)行服務(wù)線程,根據(jù)待執(zhí)行任務(wù)的頻率動(dòng) 態(tài)預(yù)置喚醒線程的時(shí)間間隔,服務(wù)線程根據(jù)執(zhí)行任務(wù)的頻率間隔一定的時(shí)間間 隔后執(zhí)行任務(wù),執(zhí)行后空閑時(shí)服務(wù)線程進(jìn)行休眠,從而降低對(duì)系統(tǒng)資源的耗費(fèi)。本發(fā)明所述的休眠時(shí)間間隔并非固定,而是根據(jù)待執(zhí)行任務(wù)的頻率使用動(dòng) 態(tài)加權(quán)設(shè)置時(shí)間間隔,動(dòng)態(tài)地讓線程進(jìn)行合理的休眠和喚醒,從而使服務(wù)線程 的每次休眠時(shí)間動(dòng)態(tài)變化,更合理地使用系統(tǒng)資源,降低對(duì)系統(tǒng)資源的耗費(fèi)進(jìn)一步,本發(fā)明的服務(wù)線程檢測(cè)到?jīng)]有待執(zhí)行任務(wù)后,而使服務(wù)線程的休 眠間隔具有記憶功能。即檢測(cè)到有待處理任務(wù)后,處理完待執(zhí)行任務(wù)后,線程 的休眠時(shí)間重置為最小單元時(shí)間間隔,當(dāng)檢測(cè)到?jīng)]有待執(zhí)行任務(wù)后,每次的休 眠時(shí)間間隔是最近兩次休眠間隔時(shí)間之和,實(shí)現(xiàn)了當(dāng)待執(zhí)行任務(wù)多時(shí),則服務(wù) 線程休眠時(shí)間短,當(dāng)待執(zhí)行任務(wù)少時(shí),則服務(wù)線程休眠時(shí)間長(zhǎng)的目的,避免了 系統(tǒng)資源的浪費(fèi),合理的解決了處理任務(wù)的效率和系統(tǒng)資源浪費(fèi)之間的矛盾。
圖1是本發(fā)明一種線程喚醒控制方法第一實(shí)施例的流程圖; 圖2是本發(fā)明 一種線程喚醒控制方法第二實(shí)施例的流程圖; 圖3是圖2所示本發(fā)明一種線程喚醒控制方法第二實(shí)施例的流程圖的具體 示意圖;圖4是本發(fā)明一種線程喚醒控制方法第三實(shí)施例的流程圖; 圖5是圖4所示本發(fā)明一種線程喚醒控制方法第三實(shí)施例的流程圖的具體 示意圖;圖6是本發(fā)明一種線程喚醒控制系統(tǒng)第一實(shí)施例的結(jié)構(gòu)框圖; 圖7是本發(fā)明一種線程喚醒控制系統(tǒng)第二實(shí)施例的結(jié)構(gòu)框圖; 圖8是本發(fā)明一種線程喚醒控制系統(tǒng)第三實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
本發(fā)明所述方案的應(yīng)用環(huán)境,可以是在Java中間件應(yīng)用服務(wù)器中,也可 以是在其他的應(yīng)用服務(wù)器環(huán)境中,如web服務(wù)器??傊?,在需要調(diào)用服務(wù)線 程的場(chǎng)景中都可以應(yīng)用本發(fā)明所述的技術(shù)方案,本發(fā)明不限定所述技術(shù)方案的 應(yīng)用環(huán)境。本發(fā)明所述的服務(wù)線程可以是消息發(fā)送、郵件發(fā)送、動(dòng)態(tài)處理上交文檔或 者其他的服務(wù)線程,對(duì)一些底層服務(wù)線程,不管是web服務(wù)器還是中間件應(yīng) 用服務(wù)器以及其他類型的服務(wù)器中的服務(wù)線程,如果滿足以下條件,本發(fā)明所 述技術(shù)方案都可以優(yōu)選適用1、 執(zhí)行時(shí)會(huì)比較消耗系統(tǒng)資源,需要合理地喚醒/休眠線程,以節(jié)省系統(tǒng) 資源。否則,如果執(zhí)行時(shí)不耗費(fèi)系統(tǒng)資源,則不斷地循環(huán)執(zhí)行時(shí)也不會(huì)耗費(fèi)太 多的系統(tǒng)資源;2、 任務(wù)處理并不需要同步執(zhí)行,但有一定的效率要求。消息發(fā)送、郵件發(fā)送這類服務(wù),既不要求如電話通信那樣的同步執(zhí)行(發(fā) 送/接收雙方都必須同步才能進(jìn)行),但又要求在一定的時(shí)間內(nèi)完成,并且比較 耗費(fèi)系統(tǒng)資源,因此都可以優(yōu)選應(yīng)用本發(fā)明所述的技術(shù)方案。當(dāng)然,本發(fā)明并 不對(duì)所述技術(shù)方案的應(yīng)用場(chǎng)景進(jìn)行限定,可以得知,在其他的場(chǎng)景中應(yīng)用本發(fā) 明所述技術(shù)方案也是落入本發(fā)明的保護(hù)范圍之內(nèi)的。 為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。本發(fā)明提供的第一實(shí)施例,參照?qǐng)D1,示出了本發(fā)明一種線程喚醒控制方法的流程圖,包括步驟101、根據(jù)待執(zhí)行任務(wù)的頻率動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔。 步驟102、線程喚醒運(yùn)行,進(jìn)入步驟103。 步驟103、檢測(cè)是否有待處理任務(wù)。線程喚醒后,系統(tǒng)檢測(cè)是否有待處理的任務(wù),進(jìn)入步驟104。 步驟104、當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù)。 當(dāng)檢測(cè)到有待處理任務(wù)后,完成所述待處理任務(wù)的處理,進(jìn)入步驟105; 如果檢測(cè)到?jīng)]有待處理的任務(wù),則直接進(jìn)入步驟105。步驟105、置線程的休眠時(shí)間為所述動(dòng)態(tài)預(yù)置的喚醒線程的時(shí)間間隔。 當(dāng)完成待處理任務(wù)的處理后或檢測(cè)到?jīng)]有待處理任務(wù)后,線程置休眠狀 態(tài),線程休眠的時(shí)間間隔置為動(dòng)態(tài)加權(quán)設(shè)置的時(shí)間間隔。所述線程的休眠時(shí)間 可以根據(jù)待處理任務(wù)的頻率自動(dòng)加權(quán)設(shè)置,可以是任意時(shí)間間隔,也可以是某 個(gè)固定時(shí)間間隔,或者其倍數(shù),還可以是成排列數(shù)的時(shí)間間隔。本發(fā)明并不對(duì) 其進(jìn)行限定。本發(fā)明提供的第二實(shí)施例,參照?qǐng)D2,示出本發(fā)明一種線程喚醒控制方法 的流程圖,包括步驟201、線程喚醒運(yùn)行。對(duì)一些比較耗費(fèi)系統(tǒng)資源的服務(wù)線程,如果所述線程一直處于運(yùn)行狀態(tài), 則會(huì)造成系統(tǒng)資源的大量浪費(fèi),為了節(jié)約系統(tǒng)資源,當(dāng)所述服務(wù)線程在沒有待 處理任務(wù)時(shí),讓其處于休眠狀態(tài),即所述線處于不可運(yùn)行狀態(tài),在待定時(shí)間或 事件激活后再恢復(fù)運(yùn)行,在本發(fā)明實(shí)施例中優(yōu)選經(jīng)過動(dòng)態(tài)加權(quán)的時(shí)間間隔后喚 醒運(yùn)行。具體喚醒方式將在步驟203、 204中詳細(xì)描述。步驟202、檢測(cè)是否有待處理任務(wù)。線程喚醒后,檢測(cè)是否有待處理任務(wù),有待處理任務(wù)則進(jìn)入步驟203;無 待處理任務(wù)則進(jìn)入步驟204。步驟203、當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完所述
待處理任務(wù)后線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間間隔At。當(dāng)線程喚醒后檢測(cè)到有待處理任務(wù)時(shí),則完成所述待處理任務(wù)的處理,如 消息的發(fā)送,郵件的發(fā)送。當(dāng)所有待處理任務(wù)都完成后,線程處于空閑狀態(tài)時(shí), 為節(jié)約系統(tǒng)資源,置所述線程為休眠爿夫態(tài),處于不可運(yùn)行狀態(tài)。為了使線程的 休眠時(shí)間間隔具有記憶功能,科學(xué)、合理的安排線程的休眠時(shí)間,達(dá)到線程在 待處理任務(wù)多時(shí)休眠時(shí)間短的目的,本發(fā)明實(shí)施例優(yōu)選采取在線程完成待處理任務(wù)后重置所述線程的休眠時(shí)間為最小單元時(shí)間間隔At。也即線程在此時(shí)的休眠時(shí)間最短,從而不會(huì)造成任務(wù)處理效率的低下,保證了任務(wù)的及時(shí)處理, 不會(huì)因?yàn)楣?jié)約資源而影響任務(wù)處理的效率,合理的解決了節(jié)約資源和任務(wù)高效 處理的矛盾。步驟204、計(jì)算最近兩次休眠的時(shí)間間隔之和Aat,置線程^沐眠的時(shí)間間 隔為Aat。當(dāng)線程喚醒后,系統(tǒng)^r測(cè)到?jīng)]有待處理任務(wù)時(shí),表明此時(shí)間段內(nèi)待處理任 務(wù)量少。此時(shí),為了達(dá)到線程在待處理任務(wù)少時(shí)休眠時(shí)間長(zhǎng),節(jié)約系統(tǒng)資源的 目的,本發(fā)明實(shí)施例優(yōu)選采取的休眠時(shí)間具有記憶功能,也即當(dāng)檢測(cè)到?jīng)]有待 處理任務(wù)后,則計(jì)算最近兩次休眠的時(shí)間間隔之和Aat,將此時(shí)線程的休眠時(shí) 間間隔置為最近兩次休眠的時(shí)間間隔之和Aat,當(dāng)線程休眠Aat后再喚醒4企測(cè) 是否有待處理任務(wù),有則進(jìn)入步驟203,無待處理任務(wù)則進(jìn)入步驟204,如此 一直循環(huán)。根據(jù)以上對(duì)本發(fā)明實(shí)施例的描述,可以知道,對(duì)于服務(wù)線程,當(dāng)其待處理 任務(wù)多時(shí),則每次處理完待處理任務(wù)后重置線程的休眠時(shí)間為最小單元時(shí)間間 隔At,本發(fā)明對(duì)所述最小單元時(shí)間間隔At沒有限制,可以根據(jù)需要任意設(shè)置, 如0.5s、 ls、 2s、 5s......。這樣保證每次都能高效率的處理完所有待處理任務(wù)。當(dāng)沒有待處理任務(wù)時(shí),則線程每次的休眠時(shí)間為最近兩次休眠時(shí)間之和,這樣 線程的休眠時(shí)間具有記憶功能,當(dāng)沒有待處理任務(wù)時(shí),線程的休眠時(shí)間越來越 長(zhǎng),浪費(fèi)的系統(tǒng)資源越來越少,從而合理的解決了浪費(fèi)系統(tǒng)資源和處理任務(wù)效 率不高的矛盾。進(jìn)一步,如果線程是第一次休眠,則所述最近兩次休眠的時(shí)間間隔之和 △at就是預(yù)置的最小單元時(shí)間間隔At。 如果線程是第二次休眠時(shí),所述最近兩次〗木眠的時(shí)間間隔都為預(yù)置的最小單元時(shí)間間隔At,所述最近兩次-沐眠的時(shí)間間隔之和Aat為最小單元時(shí)間間 隔At的2倍。下面以具體實(shí)例對(duì)本發(fā)明實(shí)施例進(jìn)行一個(gè)詳細(xì)的介紹,參照?qǐng)D3。設(shè)置最小單元時(shí)間間隔At為ls,待處理任務(wù)為消息的發(fā)送,當(dāng)線程被喚 醒后,檢測(cè)是否有消息待發(fā)送,如果檢測(cè)到有待發(fā)送消息,則發(fā)送全部待發(fā)消 息,發(fā)送完全部待發(fā)消息后,重置線程休眠時(shí)間為ls。如果線程被喚醒后枱r 測(cè)到?jīng)]有待發(fā)送消息,則線程的休眠時(shí)間是最近兩次休眠時(shí)間之和,如果線程 是第一次休眠,則所述線程的休眠時(shí)間是ls。線程休眠ls后被喚醒,再次檢 測(cè)是否有待消息,如果有,則發(fā)送所有消息,發(fā)送完后重置線程的休眠時(shí)間為 最小單元時(shí)間間隔,即ls。如果沒有待發(fā)送消息,則線程的休眠時(shí)間置為2s。 如此循環(huán)下去,易如得知如果每次都有待發(fā)送消息,則每次線程的休眠時(shí)間 都是最小單元時(shí)間間隔,即ls,如果一直都檢測(cè)到?jīng)]有待發(fā)送消息,則線程的休眠時(shí)間依次為ls、 2s、 3s、 5s、 8s、 12s、 20s、 32s......,即每次線程的休眠時(shí)間都是最近兩次線程的休眠時(shí)間之和,這樣,當(dāng)沒有待發(fā)送消息時(shí),線程的 休眠時(shí)間具有記憶功能。當(dāng)某次線程休眠被喚醒后檢測(cè)到有待發(fā)送消息后,則 在發(fā)送完待發(fā)送消息后重置線程的休眠時(shí)間為最小單元時(shí)間間隔,即ls。如 線程休眠20s后,檢測(cè)到有待發(fā)送消息,則下一次線程的休眠時(shí)間不是32s, 而是ls,從而保證了發(fā)送消息的效率,不會(huì)因?yàn)榭繝奚识?jié)約系統(tǒng)資源。 合理的解決了系統(tǒng)資源的節(jié)約和高效發(fā)送消息的矛盾。本發(fā)明提供的第三實(shí)施例,參照?qǐng)D4,示出本發(fā)明一種線程喚醒控制方法 的流程圖,包括步驟401、線程喚醒運(yùn)行。對(duì)一些比較耗費(fèi)系統(tǒng)資源的服務(wù)線程,如果所述線程一直處于運(yùn)行狀態(tài), 則會(huì)造成系統(tǒng)資源的大量浪費(fèi),為了節(jié)約系統(tǒng)資源,當(dāng)所述服務(wù)線程在沒有待 處理任務(wù)時(shí),讓其處于休眠狀態(tài),即所述線處于不可運(yùn)行狀態(tài),在待定時(shí)間或 事件激活后再恢復(fù)運(yùn)行,在本發(fā)明實(shí)施例中優(yōu)選經(jīng)過動(dòng)態(tài)加權(quán)的時(shí)間間隔后喚 醒運(yùn)行。具體喚醒方式將在步驟403、 404中詳細(xì)描述。步驟402、檢測(cè)是否有待處理任務(wù)。
線程喚醒后,檢測(cè)是否有待處理任務(wù),有待處理任務(wù)則進(jìn)入步驟403;無 待處理任務(wù)則進(jìn)入步驟404。步驟403、當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完所述 待處理任務(wù)后線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間間隔At。當(dāng)線程喚醒后檢測(cè)到有待處理任務(wù)時(shí),則完成所述待處理任務(wù)的處理,如 消息的發(fā)送,郵件的發(fā)送。當(dāng)所有待處理任務(wù)都完成后,線程處于空閑狀態(tài)時(shí), 為節(jié)約系統(tǒng)資源,置所述線程為休眠狀態(tài),處于不可運(yùn)行狀態(tài)。為了使線程的 休眠時(shí)間間隔具有記憶功能,科學(xué)、合理的安排線程的休眠時(shí)間,達(dá)到線程在 待處理任務(wù)多時(shí)休眠時(shí)間短的目的,本發(fā)明實(shí)施例優(yōu)選采取在線程完成待處理 任務(wù)后重置所述線程的休眠時(shí)間為最小單元時(shí)間間隔At。也即線程在此時(shí)的 休眠時(shí)間最短,從而不會(huì)造成任務(wù)處理效率的低下,保證了任務(wù)的及時(shí)處理, 不會(huì)因?yàn)楣?jié)約資源而影響任務(wù)處理的效率,合理的解決了節(jié)約資源和任務(wù)高效 處理的矛盾。步驟404、計(jì)算最近兩次^木眠的時(shí)間間隔之和Aat。步驟405、預(yù)置最大時(shí)間間隔AT,判斷最近兩次休眠的時(shí)間間隔之和Aat 和預(yù)置的最大時(shí)間間隔AT關(guān)系,所述最大時(shí)間間隔AT可以根據(jù)實(shí)際情況任 意設(shè)置,如10s、 30s、 60s......,本發(fā)明并不對(duì)此進(jìn)行限定步驟406、當(dāng)最近兩次休眠的時(shí)間間隔之和Aat大于所述預(yù)設(shè)的最大時(shí)間 間隔AT時(shí),則所述線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間間隔At。步驟407、如果所述最近兩次休眠的時(shí)間間隔之和Aat不大于所述預(yù)設(shè)的 最大時(shí)間間隔AT時(shí),則置線程休眠的時(shí)間間隔為Aat。根據(jù)以上對(duì)本發(fā)明實(shí)施例的描述,可以知道,對(duì)于服務(wù)線程,當(dāng)其待處理 任務(wù)多時(shí),則每次處理完待處理任務(wù)后重置線程的休眠時(shí)間為最小單元時(shí)間間 隔At,本發(fā)明對(duì)所述最小單元時(shí)間間隔At沒有限制,可以根據(jù)需要任意設(shè)置, 如0.5s、 ls、 2s、 5s......。這樣保證每次都能高效率的處理完所有待處理任務(wù)。當(dāng)沒有待處理任務(wù)時(shí),則線程每次的休眠時(shí)間為最近兩次休眠時(shí)間之和,這樣 線程的休眠時(shí)間具有記憶功能,當(dāng)沒有待處理任務(wù)時(shí),線程的休眠時(shí)間越來越 長(zhǎng),浪費(fèi)的系統(tǒng)資源越來越少,并且設(shè)置一個(gè)最大時(shí)間間隔AT,當(dāng)最近兩次休 眠的時(shí)間間隔之和Aat大于所述預(yù)設(shè)的最大時(shí)間間隔AT時(shí),則重置線程的休
眠時(shí)間為最小單元時(shí)間間隔,這樣避免了由于線程很長(zhǎng)時(shí)間的休眠而不會(huì)被喚醒,檢測(cè)待處理任務(wù),不會(huì)造成處理任務(wù)效率的低下。
進(jìn)一步,如果線程是第一次休眠,則所述最近兩次休眠的時(shí)間間隔之和△at就是預(yù)置的最小單元時(shí)間間隔△At。
如果線程是第二次休眠時(shí),所述最近兩次休眠的時(shí)間間隔都為預(yù)置的最小單元時(shí)間間隔△t,所述最近兩次休眠的時(shí)間間隔之和△at為最小單元時(shí)間間隔△t的2倍。
下面以具體實(shí)例對(duì)本發(fā)明實(shí)施例進(jìn)行一個(gè)詳細(xì)的介紹,參照?qǐng)D5。
設(shè)置最小單元時(shí)間間隔為1s,待處理任務(wù)為消息的發(fā)送,最大時(shí)間間隔 △T為30s,當(dāng)線程被喚醒后,檢測(cè)是否有消息待發(fā)送,如果檢測(cè)到有待發(fā)送消息,則發(fā)送全部待發(fā)消息,發(fā)送完全部待發(fā)消息后,重置線程休眠時(shí)間為ls。如果線程被喚醒后檢測(cè)到?jīng)]有待發(fā)送消息,則線程的休眠時(shí)間是最近兩次休眠時(shí)間之和,如果線程是第一次休眠,則所述線程的休眠時(shí)間是ls。線程 休眠ls后被喚醒,再次檢測(cè)是否有待消息,如果有,則發(fā)送所有消息,發(fā)送完后重置線程的休眠時(shí)間為最小單元時(shí)間間隔,即ls。如果沒有待發(fā)送消息, 則線程的休眠時(shí)間置為2s。如此循環(huán)下去,易如得知如果每次都有待發(fā)送消息,則每次線程的休眠時(shí)間都是最小單元時(shí)間間隔,即ls,如果一直都檢測(cè)到?jīng)]有待發(fā)送消息,則線程的休眠時(shí)間依次為ls、 2s、 3s、 5s、 8s、 12s、 20s、 32s......,即每次線程的休眠時(shí)間都是最近兩次線程的休眠時(shí)間之和,這樣,當(dāng)沒有待發(fā)送消息時(shí),線程的休眠時(shí)間具有記憶功能。當(dāng)某次線程休眠被喚醒后 檢測(cè)到有待發(fā)送消息后,則在發(fā)送完待發(fā)送消息后重置線程的休眠時(shí)間為最小單元時(shí)間間隔,即ls。當(dāng)一直檢測(cè)到?jīng)]有待發(fā)送消息,線程進(jìn)行第8次休眠時(shí),由于所述將務(wù)沐眠的時(shí)間超過預(yù)設(shè)的最大時(shí)間間隔30s,則線程的第8次休眠時(shí)間不是32s,而是最小單元時(shí)間間隔,即ls。這樣避免了由于線程很長(zhǎng)時(shí)間的休眠而不會(huì)被喚醒,檢測(cè)待處理任務(wù),不會(huì)造成處理任務(wù)效率的低下。
本發(fā)明同時(shí)還公開了一種線程喚醒控制系統(tǒng),參照?qǐng)D6,示出了本發(fā)明一 種線程喚醒控制系統(tǒng)的實(shí)施例一的結(jié)構(gòu)示意圖。
本系統(tǒng)包括線程喚醒單元601,用于線程喚醒運(yùn)行;任務(wù)檢測(cè)單元602, 用于檢測(cè)是否有待處理任務(wù);任務(wù)處理單元603,用于完成待處理任務(wù)的處理;
休眠時(shí)間動(dòng)態(tài)重置單元604,用于動(dòng)態(tài)重置線程的^f木眠時(shí)間。 本系統(tǒng)的的工作原理和工作過程如下休眠結(jié)束后,線程喚醒單元601喚醒線程運(yùn)行,線程喚醒后,任務(wù)檢測(cè)單 元602檢測(cè)是否有待處理任務(wù),如果有待處理任務(wù),則調(diào)用任務(wù)處理單元603 完成所述待處理任務(wù)的處理。然后調(diào)用^"木眠時(shí)間重置單元604動(dòng)態(tài)重置線程的 休眠時(shí)間,如果沒有待處理任務(wù),則直接調(diào)用休眠時(shí)間動(dòng)態(tài)重置單元604動(dòng)態(tài) 重置線程的休眠時(shí)間。所述線程的休眠時(shí)間可以根據(jù)待處理任務(wù)的頻率自動(dòng)加 權(quán)設(shè)置,可以是任意時(shí)間間隔,也可以是某個(gè)固定時(shí)間間隔,或者其倍數(shù),還 可以是成排列數(shù)的時(shí)間間隔。本發(fā)明并不對(duì)其進(jìn)行限定。參照?qǐng)D7,示出了本發(fā)明一種線程喚醒控制系統(tǒng)的實(shí)施例二的結(jié)構(gòu)示意圖。本系統(tǒng)包括線程喚醒單元701,用于線程喚醒運(yùn)行;任務(wù)4企測(cè)單元702, 用于檢測(cè)是否有待處理任務(wù);任務(wù)處理單元703,用于完成待處理任務(wù)的處理; 休眠時(shí)間重置單元704,當(dāng)^r測(cè)單元才企測(cè)到有待處理任務(wù)時(shí)則在處理完所述4寺 處理任務(wù)后重置線程的休眠時(shí)間為預(yù)置的最小單元時(shí)間間隔At,否則;置線程休眠的時(shí)間間隔為最近兩次休眠的時(shí)間間隔之和Aat。本系統(tǒng)的的 工作原理和工作過程如下休眠結(jié)束后,線程喚醒單元701喚醒線程運(yùn)行,線程喚醒后,任務(wù)^r測(cè)單 元702檢測(cè)是否有待處理任務(wù),如果有待處理任務(wù),則調(diào)用任務(wù)處理單元703 完成所述待處理任務(wù)的處理。然后調(diào)用休眠時(shí)間重置單元704重置線程的休眠 時(shí)間為最小單元時(shí)間間隔At,如果沒有待處理任務(wù),則直接調(diào)用休眠時(shí)間重 置單元704置線程的休眠時(shí)間為最近兩次線程休眠時(shí)間之和Aat。參照?qǐng)D8,示出了本發(fā)明一種線程喚醒控制系統(tǒng)的實(shí)施例三的結(jié)構(gòu)示意圖。本系統(tǒng)包括線程喚醒單元801,用于線程喚醒運(yùn)行;任務(wù)檢測(cè)單元802, 用于檢測(cè)是否有待處理任務(wù);任務(wù)處理單元803,用于完成待處理任務(wù)的處理; 休眠時(shí)間重置單元804,當(dāng)4全測(cè)單元檢測(cè)到有待處理任務(wù)時(shí)則在處理完所述待 處理任務(wù)后重置線程的休眠時(shí)間為預(yù)置的最小單元時(shí)間間隔At,否則;置線程休眠的時(shí)間間隔為最近兩次休眠的時(shí)間間隔之和Aat。
判斷單元805,用于判斷最近兩次休眠的時(shí)間間隔之和Aat是否超出所述 預(yù)-沒的最大時(shí)間間隔AT本系統(tǒng)的的工作原理和工作過程如下休眠結(jié)束后,線程喚醒單元801喚醒線程運(yùn)行,線程喚醒后,任務(wù);f企測(cè)單 元802檢測(cè)是否有待處理任務(wù),如果有待處理任務(wù),則調(diào)用任務(wù)處理單元803 完成所述待處理任務(wù)的處理。然后調(diào)用休眠時(shí)間重置單元804重置線程的休眠 時(shí)間為最小單元時(shí)間間隔At,如果沒有待處理任務(wù),則計(jì)算最近兩次休眠時(shí) 間之和Aat,并調(diào)用判斷單元805判斷最近兩次休眠的時(shí)間間隔之和Aat是否 超出所述預(yù)i殳的最大時(shí)間間隔AT,如果最近兩次^f木眠的時(shí)間間隔之和Aat大 于所述預(yù)設(shè)的最大時(shí)間間隔AT,則重置線程的^木眠時(shí)間為最小單元時(shí)間間隔 △t,如果最近兩次休眠的時(shí)間間隔之和Aat不大于所述預(yù)設(shè)的最大時(shí)間間隔 △T,則置線程的〗木眠時(shí)間為最近兩次〗木眠的時(shí)間間隔之和Aat。由于圖6、圖7、圖8所示系統(tǒng)與圖1、圖2、圖4所示方法——對(duì)應(yīng),因 此,系統(tǒng)中未詳細(xì)介紹的部分參照方法中相應(yīng)部分即可。以上對(duì)本發(fā)明所提供的 一種線程喚醒控制方法和系統(tǒng),進(jìn)行了詳細(xì)介紹,說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般 技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處, 綜上所述,本il明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1、 一種線程喚醒控制方法,其特征在于,包括 根據(jù)待執(zhí)行任務(wù)的頻率動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔; 線程喚醒運(yùn)行;檢測(cè)是否有待處理任務(wù);當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完畢后進(jìn)入下一 步;當(dāng)檢測(cè)到?jīng)]有待處理任務(wù)時(shí)則直接進(jìn)入下一步;置線程的休眠時(shí)間為所述動(dòng)態(tài)預(yù)置的喚醒線程的時(shí)間間隔。
2、 如權(quán)利要求1所述的線程喚醒控制方法,其特征在于 所述動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔為任意時(shí)間間隔。
3、 如權(quán)利要求1所述的線程喚醒控制方法,其特征在于 所述動(dòng)態(tài)預(yù)置喚醒線程的時(shí)間間隔為固定時(shí)間間隔的倍數(shù)。
4、 一種線程喚醒控制方法,其特征在于,包括 線程喚醒運(yùn)行; 檢測(cè)是否有待處理任務(wù);當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完所述待處理任務(wù) 后線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間間隔At,否則;計(jì)算最近兩次休眠的時(shí)間間隔之和Aat,置線程休眠的時(shí)間間隔為Aat。
5、 如權(quán)利要求4所述的線程喚醒控制方法,其特征在于 當(dāng)線程第一次休眠時(shí),所述最近兩次休眠的時(shí)間間隔之和Aat為預(yù)置的最小單元時(shí)間間隔At。
6、 如;K利要求4所述的線程喚醒控制方法,其特征在于 當(dāng)線程第二次休眠時(shí),所述最近兩次休眠的時(shí)間間隔都為預(yù)置的最小單元時(shí)間間隔At,所述最近兩次休眠的時(shí)間間隔之和Aat為2At。
7、 如權(quán)利要求4所述的線程喚醒控制方法,其特征在于,還包括 預(yù)置最大時(shí)間間隔AT,當(dāng)最近兩次休眠的時(shí)間間隔之和Aat超出所述預(yù) 設(shè)的最大時(shí)間間隔AT時(shí),則所述線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間 間隔At。8、 一種線程喚醒控制系統(tǒng),其特征在于,包括 線程喚醒單元,用于線程喚醒運(yùn)行; 任務(wù)檢測(cè)單元,用于檢測(cè)是否有待處理任務(wù); 任務(wù)處理單元,用于完成待處理任務(wù)的處理; 休眠時(shí)間動(dòng)態(tài)重置單元,用于動(dòng)態(tài)重置線程的休眠時(shí)間。9、 一種線程喚醒控制系統(tǒng),其特征在于,包括 線程喚醒單元,用于線程喚醒運(yùn)行; 任務(wù)檢測(cè)單元,用于檢測(cè)是否有待處理任務(wù); 任務(wù)處理單元,用于完成待處理任務(wù)的處理;休眠時(shí)間重置單元,當(dāng)檢測(cè)單元檢測(cè)到有待處理任務(wù)時(shí)則在處理單元處理 完所述待處理任務(wù)后重置線程的休眠時(shí)間為預(yù)置的最小單元時(shí)間間隔At,否 則;置線程休眠的時(shí)間間隔為最近兩次休眠的時(shí)間間隔之和Aat。10、 如權(quán)利要求9所述的線程喚醒控制系統(tǒng),其特征在于,還包括 判斷單元,用于判斷最近兩次休眠的時(shí)間間隔之和Aat是否超出預(yù)設(shè)的最大時(shí)間間隔AT。
全文摘要
本發(fā)明提供了一種線程喚醒控制方法,包括步驟線程喚醒運(yùn)行,檢測(cè)是否有待處理任務(wù),當(dāng)檢測(cè)到有待處理任務(wù)時(shí)則執(zhí)行所述待處理任務(wù),處理完所述待處理任務(wù)后線程的休眠時(shí)間重置為預(yù)置的最小單元時(shí)間間隔Δt,否則;計(jì)算最近兩次休眠的時(shí)間間隔之和Δat,置線程休眠的時(shí)間間隔為Δat。實(shí)現(xiàn)了當(dāng)待執(zhí)行任務(wù)多時(shí),則服務(wù)線程休眠時(shí)間短,當(dāng)待執(zhí)行任務(wù)少時(shí),則服務(wù)線程休眠時(shí)間長(zhǎng)的目的,避免了系統(tǒng)資源的浪費(fèi),合理的解決了處理任務(wù)的效率和系統(tǒng)資源浪費(fèi)之間的矛盾。
文檔編號(hào)G06F9/50GK101122870SQ20071016414
公開日2008年2月13日 申請(qǐng)日期2007年9月30日 優(yōu)先權(quán)日2007年9月30日
發(fā)明者鐘發(fā)然 申請(qǐng)人:金蝶軟件(中國(guó))有限公司