本申請(qǐng)涉及計(jì)算機(jī)運(yùn)算處理技術(shù)領(lǐng)域,尤其涉及一種快速釋放線程的資源調(diào)度方法和系統(tǒng)。
背景技術(shù):
計(jì)數(shù)鎖,即在多線程并發(fā)操作中,對(duì)一組任務(wù)進(jìn)行整體鎖控制的機(jī)制,其表現(xiàn)為應(yīng)在預(yù)期任務(wù)執(zhí)行完成時(shí)釋放鎖。
現(xiàn)有主流方案主要采用如下步驟:
a.初始化計(jì)數(shù)鎖,設(shè)置一個(gè)任務(wù)數(shù)初值n,以及一個(gè)超時(shí)時(shí)間t。
b.主線程提交所有任務(wù)開始執(zhí)行,計(jì)數(shù)鎖進(jìn)行計(jì)數(shù)。
c.主線程等待計(jì)數(shù)鎖釋放,在此期間,執(zhí)行任務(wù)的線程在執(zhí)行完成時(shí)將計(jì)數(shù)鎖的n執(zhí)行減一操作。
d.計(jì)數(shù)鎖在n減為零,或者等待時(shí)間超過(guò)設(shè)定的超時(shí)時(shí)間t時(shí)釋放。
但是,在執(zhí)行相關(guān)的一組任務(wù)時(shí),若其中一個(gè)任務(wù)失敗,計(jì)數(shù)鎖無(wú)法快速得到釋放,其他任務(wù)的線程仍然會(huì)被占用直到對(duì)應(yīng)的任務(wù)執(zhí)行結(jié)束,產(chǎn)生非必要的資源消耗,同時(shí),主線程無(wú)法獲知各個(gè)任務(wù)的執(zhí)行狀態(tài),只能在計(jì)數(shù)鎖置零時(shí)結(jié)束該組任務(wù)并退出該主線程,響應(yīng)速度慢,資源占用時(shí)間長(zhǎng),運(yùn)算效率較低。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)中的上述問(wèn)題,本申請(qǐng)的一個(gè)目的在于提出一種快速釋放線程的資源調(diào)度方法及系統(tǒng),可以在執(zhí)行相關(guān)聯(lián)的一組任務(wù)時(shí)對(duì)任務(wù)的失敗進(jìn)行快速響應(yīng)并終止相關(guān)任務(wù),避免非必要的資源消耗。
為達(dá)到上述目的,本申請(qǐng)實(shí)施例提出的快速釋放線程的資源調(diào)度方法,包括:調(diào)度線程將多個(gè)任務(wù)分配至任務(wù)線程;計(jì)數(shù)鎖記錄所述多個(gè)任務(wù)線程的任務(wù)完成情況;當(dāng)所述多個(gè)任務(wù)中有至少一個(gè)任務(wù)執(zhí)行失敗時(shí),對(duì)應(yīng)的任務(wù)線程向所述計(jì)數(shù)鎖發(fā)送失敗信息,并喚醒所述調(diào)度線程;所述調(diào)度線程獲取所述計(jì)數(shù)鎖記錄的所述失敗信息, 并釋放其他相關(guān)的任務(wù)線程。
為達(dá)到上述目的,本申請(qǐng)實(shí)施例提出的快速釋放線程的資源調(diào)度系統(tǒng),包括:調(diào)度線程,用于將多個(gè)任務(wù)分配至任務(wù)線程,以及被喚醒后獲取所述計(jì)數(shù)鎖記錄的所述失敗信息,并釋放其他相關(guān)的任務(wù)線程;計(jì)數(shù)鎖,用于記錄所述多個(gè)任務(wù)線程的任務(wù)完成情況;任務(wù)線程,用于執(zhí)行調(diào)度線程分配的任務(wù),以及當(dāng)所述任務(wù)執(zhí)行失敗時(shí),向所述計(jì)數(shù)鎖發(fā)送失敗信息,并喚醒所述調(diào)度線程。
由以上本申請(qǐng)實(shí)施例提供的技術(shù)方案可見,通過(guò)在相關(guān)聯(lián)的任務(wù)中有一個(gè)任務(wù)失敗時(shí)由計(jì)數(shù)鎖記錄失敗信息并喚醒主線程,主線程根據(jù)計(jì)數(shù)鎖的記錄釋放相關(guān)的其他任務(wù)線程,能夠快速響應(yīng)一個(gè)任務(wù)失敗導(dǎo)致的全體任務(wù)失敗,及時(shí)釋放資源,避免不必要的資源占用;此外,主線程通過(guò)計(jì)數(shù)鎖記錄的失敗原因能夠獲取相應(yīng)的失敗信息,有利于根據(jù)任務(wù)失敗的信息對(duì)系統(tǒng)進(jìn)行改進(jìn),進(jìn)而提高系統(tǒng)的自動(dòng)化水平,提高效率。
本申請(qǐng)附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本申請(qǐng)的實(shí)踐了解到。
附圖說(shuō)明
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是現(xiàn)有技術(shù)中利用計(jì)數(shù)鎖進(jìn)行線程資源調(diào)度的原理框圖;
圖2是本申請(qǐng)一實(shí)施例提出的快速釋放線程的資源調(diào)度方法的流程示意圖;
圖3是本申請(qǐng)另一實(shí)施例的利用計(jì)數(shù)鎖實(shí)現(xiàn)快速失敗的執(zhí)行框架示意圖;
圖4是本申請(qǐng)一實(shí)施例的快速釋放線程的資源調(diào)度系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
本申請(qǐng)實(shí)施例提供一種快速釋放線程的資源調(diào)度方法和系統(tǒng)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)中的技術(shù)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng) 屬于本申請(qǐng)保護(hù)的范圍。
圖1是利用計(jì)數(shù)鎖進(jìn)行線程資源調(diào)度的原理框圖,在現(xiàn)有技術(shù)中,主線程main也可以理解為調(diào)度線程,負(fù)責(zé)對(duì)計(jì)數(shù)鎖進(jìn)行初始化,設(shè)置任務(wù)數(shù)n和超時(shí)時(shí)間t,將任務(wù)發(fā)放到線程池中執(zhí)行,并調(diào)用計(jì)數(shù)鎖對(duì)線程池中的任務(wù)線程進(jìn)行監(jiān)督。計(jì)數(shù)鎖開始工作后檢查是否設(shè)置了超時(shí)時(shí)間,如果未設(shè)置超時(shí)時(shí)間則直接進(jìn)入等待,即直到所有任務(wù)結(jié)束、計(jì)數(shù)鎖置零時(shí)才退出,如果設(shè)置了超時(shí)時(shí)間則進(jìn)入帶超時(shí)的等待,即所有任務(wù)結(jié)束、計(jì)數(shù)鎖置零或者等待時(shí)間達(dá)到超時(shí)時(shí)間則退出等待。在等待過(guò)程中每次任務(wù)線程有更新主線程都會(huì)被喚醒,檢查計(jì)數(shù)值是否歸零:
a)如果未歸零,且有超時(shí)時(shí)間,則計(jì)算剩余超時(shí)時(shí)間是否大于零:
若剩余超時(shí)時(shí)間大于零,則繼續(xù)使用剩余超時(shí)時(shí)間進(jìn)行等待;
若剩余超時(shí)時(shí)間小于零,則直接返回,并設(shè)置結(jié)果為超時(shí);
b)如果未歸零,且無(wú)超時(shí)時(shí)間,則繼續(xù)等待;
c)如果歸零,則直接退出等待,并返回。
在上述計(jì)數(shù)鎖機(jī)制的基礎(chǔ)上,每次任務(wù)線程有變化都會(huì)記錄到計(jì)數(shù)鎖并喚醒主線程檢查計(jì)數(shù)值,但是上述的現(xiàn)有資源調(diào)度方法僅適用于不存在結(jié)果相關(guān)性的多個(gè)任務(wù)的執(zhí)行,當(dāng)一組任務(wù)中有一個(gè)任務(wù)失敗,所有任務(wù)的執(zhí)行結(jié)果都會(huì)受到影響時(shí),這種結(jié)果相關(guān)性較高的一組任務(wù)就會(huì)在一個(gè)任務(wù)失敗時(shí)無(wú)法釋放其他的任務(wù)線程,導(dǎo)致資源的非必要占用,計(jì)數(shù)鎖和主線程都沒(méi)有建立迅速響應(yīng)這種單獨(dú)失敗的機(jī)制,從而無(wú)法迅速釋放所占用的資源。
圖2是本申請(qǐng)一實(shí)施例提出的快速釋放線程的資源調(diào)度方法的流程示意圖,在該圖所示的實(shí)施例中,通過(guò)任務(wù)線程向計(jì)數(shù)鎖發(fā)送失敗信息并喚醒調(diào)度線程,使得調(diào)度線程能夠迅速識(shí)別任務(wù)失敗,釋放其他相關(guān)的任務(wù)線程。如圖2所示,該方法包括:
步驟201,調(diào)度線程將多個(gè)任務(wù)分配至任務(wù)線程。
步驟202,計(jì)數(shù)鎖記錄所述多個(gè)任務(wù)線程的任務(wù)完成情況。
步驟203,當(dāng)所述多個(gè)任務(wù)中有至少一個(gè)任務(wù)執(zhí)行失敗時(shí),對(duì)應(yīng)的任務(wù)線程向所述計(jì)數(shù)鎖發(fā)送失敗信息,并喚醒所述調(diào)度線程。
步驟204,調(diào)度線程獲取所述計(jì)數(shù)鎖記錄的所述失敗信息,并釋放其他相關(guān)的任務(wù)線程。
其中,失敗信息可以包括任務(wù)執(zhí)行狀態(tài)和失敗原因。任務(wù)執(zhí)行狀態(tài)例如是任務(wù)失 敗,失敗原因可以有多種情況,可用于生成系統(tǒng)日志或作為運(yùn)行反饋等。失敗信息可以使用特殊標(biāo)識(shí)來(lái)進(jìn)行標(biāo)記,本申請(qǐng)對(duì)此不做限定。
根據(jù)現(xiàn)有的調(diào)度機(jī)制,調(diào)度線程也可以稱為主線程,在初始化計(jì)數(shù)鎖并將任務(wù)分配至任務(wù)線程后,主線程會(huì)進(jìn)入休眠,而在任務(wù)線程完成任務(wù)時(shí)將計(jì)數(shù)鎖減一并喚醒主線程來(lái)查看計(jì)數(shù)值是否已經(jīng)置零。
根據(jù)本發(fā)明的實(shí)施例,在任務(wù)線程執(zhí)行任務(wù)失敗時(shí)也能夠向計(jì)數(shù)鎖發(fā)送失敗信息并喚醒主線程,計(jì)數(shù)鎖記錄該任務(wù)線程的失敗狀態(tài)和失敗原因,主線程在被喚醒后查看計(jì)數(shù)鎖,首先根據(jù)計(jì)數(shù)鎖記錄的情況終止其他任務(wù)的執(zhí)行,釋放相關(guān)的其他任務(wù)線程,這樣能夠快速響應(yīng)一個(gè)任務(wù)失敗導(dǎo)致的全體任務(wù)失敗,及時(shí)釋放資源,避免不必要的資源占用;此外,主線程通過(guò)計(jì)數(shù)鎖記錄的失敗原因能夠獲取相應(yīng)的反饋,有利于根據(jù)任務(wù)失敗的原因?qū)ο到y(tǒng)進(jìn)行改進(jìn),進(jìn)而提高系統(tǒng)的自動(dòng)化水平。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述至少一個(gè)任務(wù)執(zhí)行失敗包括所述至少一個(gè)任務(wù)重試預(yù)設(shè)次數(shù)后失敗,或者,所述至少一個(gè)任務(wù)在預(yù)設(shè)時(shí)間內(nèi)未執(zhí)行成功。例如,可以預(yù)先設(shè)置每個(gè)任務(wù)重試多少次后不再重試,認(rèn)定為任務(wù)失敗,也可以預(yù)先設(shè)置一個(gè)任務(wù)時(shí)間,該時(shí)間可以相當(dāng)于計(jì)數(shù)鎖中預(yù)設(shè)的超時(shí)時(shí)間,也可以是單獨(dú)為每一個(gè)任務(wù)設(shè)置的超時(shí)時(shí)間,當(dāng)任務(wù)執(zhí)行時(shí)間超過(guò)該預(yù)設(shè)時(shí)間時(shí),任務(wù)被認(rèn)定為失敗。這樣在系統(tǒng)中存在整體重試的機(jī)制時(shí),能夠盡量減少整體任務(wù)的重試次數(shù),對(duì)一個(gè)線程的任務(wù)進(jìn)行多次重試或超時(shí)后才停止其他任務(wù)的進(jìn)行,有效減少了資源重復(fù)占用,提高效率。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,在所述計(jì)數(shù)鎖記錄所述多個(gè)任務(wù)線程的任務(wù)完成情況之后,所述方法還包括:所述任務(wù)線程在完成任務(wù)后向所述計(jì)數(shù)鎖發(fā)送任務(wù)狀態(tài)信息;所述計(jì)數(shù)鎖根據(jù)任務(wù)數(shù)量、所述任務(wù)狀態(tài)信息和預(yù)設(shè)參數(shù)進(jìn)行等待。例如在任務(wù)線程執(zhí)行成功后通知計(jì)數(shù)鎖并喚醒主線程,每有任務(wù)執(zhí)行成功計(jì)數(shù)值減一,直到計(jì)數(shù)值為零時(shí)釋放鎖。其中,預(yù)設(shè)參數(shù)可以是超時(shí)時(shí)間或者重試次數(shù)等。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,當(dāng)至少一個(gè)任務(wù)執(zhí)行失敗時(shí),當(dāng)至少一個(gè)任務(wù)執(zhí)行失敗時(shí),所述計(jì)數(shù)鎖的計(jì)數(shù)值置為預(yù)設(shè)的特殊值;當(dāng)所有任務(wù)執(zhí)行成功時(shí),所述計(jì)數(shù)鎖的計(jì)數(shù)值置零。例如,任務(wù)執(zhí)行成功計(jì)數(shù)鎖置零釋放,有一個(gè)任務(wù)執(zhí)行失敗時(shí)計(jì)數(shù)鎖同樣釋放,但是可以置為一個(gè)特殊值,例如置為-1或其它特殊值,從而主進(jìn)程能夠識(shí)別該計(jì)數(shù)鎖是正常釋放還是異常釋放。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述計(jì)數(shù)鎖中包括預(yù)設(shè)的結(jié)構(gòu)化數(shù)據(jù)映射,在所述對(duì) 應(yīng)的任務(wù)線程向所述計(jì)數(shù)鎖發(fā)送失敗信息之后,所述計(jì)數(shù)鎖將所述失敗信息記錄在所述任務(wù)線程對(duì)應(yīng)的所述結(jié)構(gòu)化數(shù)據(jù)映射中。結(jié)構(gòu)化數(shù)據(jù)映射例如是預(yù)先構(gòu)建的圖表、表格等,與每個(gè)線程的標(biāo)識(shí)一一對(duì)應(yīng),在收到失敗信息后,計(jì)數(shù)鎖可以識(shí)別發(fā)送該失敗信息的任務(wù)線程的標(biāo)識(shí),例如線程的編號(hào)等,根據(jù)該任務(wù)線程的標(biāo)識(shí)找到對(duì)應(yīng)的結(jié)構(gòu)化數(shù)據(jù)映射,并將收到的失敗信息相應(yīng)地寫入該映射中,記錄的信息例如是:線程編號(hào)、執(zhí)行結(jié)果、執(zhí)行進(jìn)度、失敗原因等,其中,執(zhí)行結(jié)果以失敗為主,但是需要理解的是,在執(zhí)行成功時(shí)也可以通過(guò)該映射進(jìn)行記錄,從而執(zhí)行結(jié)果也可以是成功,本發(fā)明不再對(duì)此進(jìn)行說(shuō)明;失敗原因可以是在執(zhí)行任務(wù)的過(guò)程中,任務(wù)線程獲取到的錯(cuò)誤代碼或錯(cuò)誤信息,例如所執(zhí)行的任務(wù)是到服務(wù)器a獲取a賬戶的賬戶信息,在執(zhí)行失敗時(shí)任務(wù)線程可以通過(guò)可行的手段抓取到服務(wù)器a返回的錯(cuò)誤信息,錯(cuò)誤信息例如是服務(wù)器連接超時(shí)、賬戶信息不存在、請(qǐng)求已過(guò)期等等。通過(guò)結(jié)構(gòu)化數(shù)據(jù)映射記錄每個(gè)任務(wù)線程相關(guān)的失敗信息,可以在任務(wù)結(jié)束后進(jìn)行有效的錯(cuò)誤信息總結(jié)和反饋,便于程序的糾錯(cuò)和改進(jìn)。
根據(jù)本發(fā)明的實(shí)施例,可以在相關(guān)聯(lián)的任務(wù)中有一個(gè)任務(wù)失敗時(shí)將計(jì)數(shù)鎖釋放,并喚醒調(diào)度線程釋放相關(guān)的其他未執(zhí)行結(jié)束的任務(wù)線程,能夠快速響應(yīng)一個(gè)任務(wù)失敗導(dǎo)致的全體任務(wù)失敗,及時(shí)釋放資源,避免不必要的資源占用;此外,主線程通過(guò)計(jì)數(shù)鎖記錄的失敗原因能夠獲取相應(yīng)的反饋,有利于根據(jù)任務(wù)失敗的原因?qū)ο到y(tǒng)進(jìn)行改進(jìn),進(jìn)而提高系統(tǒng)的自動(dòng)化水平,提高效率。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種快速釋放線程的資源調(diào)度系統(tǒng),可以用于實(shí)現(xiàn)上述實(shí)施例所描述的方法,如下面的實(shí)施例所述。由于快速釋放線程的資源調(diào)度系統(tǒng)解決問(wèn)題的原理與快速釋放線程的資源調(diào)度方法相似,因此快速釋放線程的資源調(diào)度系統(tǒng)的實(shí)施可以參見快速釋放線程的資源調(diào)度系統(tǒng)的實(shí)施,重復(fù)之處不再贅述。以下所使用的,術(shù)語(yǔ)“單元”或者“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的系統(tǒng)較佳地以軟件來(lái)實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。
圖3是本申請(qǐng)一實(shí)施例的快速釋放線程的資源調(diào)度系統(tǒng)的結(jié)構(gòu)示意圖。本實(shí)施例的系統(tǒng)可以為實(shí)現(xiàn)相應(yīng)功能的邏輯部件構(gòu)成,也可以為運(yùn)行有相應(yīng)功能軟件的電子設(shè)備,本實(shí)施例的系統(tǒng)可以是操作系統(tǒng)也可以是計(jì)算機(jī)程序等。
如圖3所示,該快速釋放線程的資源調(diào)度系統(tǒng)包括:調(diào)度線程100、計(jì)數(shù)鎖200 和任務(wù)線程300。
其中,調(diào)度線程100用于將多個(gè)任務(wù)分配至任務(wù)線程,以及被喚醒后獲取所述計(jì)數(shù)鎖記錄的所述失敗信息,并釋放其他相關(guān)的任務(wù)線程。
計(jì)數(shù)鎖200用于記錄所述多個(gè)任務(wù)線程的任務(wù)完成情況;
任務(wù)線程300用于執(zhí)行調(diào)度線程分配的任務(wù),以及當(dāng)所述任務(wù)執(zhí)行失敗時(shí),向所述計(jì)數(shù)鎖發(fā)送失敗信息,并喚醒所述調(diào)度線程。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述失敗信息包括任務(wù)執(zhí)行狀態(tài)和失敗原因。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述至少一個(gè)任務(wù)執(zhí)行失敗包括所述至少一個(gè)任務(wù)重試預(yù)設(shè)次數(shù)后失敗,或者,所述至少一個(gè)任務(wù)在預(yù)設(shè)時(shí)間內(nèi)未執(zhí)行成功。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述任務(wù)線程還用于在完成任務(wù)后向所述計(jì)數(shù)鎖發(fā)送任務(wù)狀態(tài)信息;所述計(jì)數(shù)鎖還用于根據(jù)任務(wù)數(shù)量、所述任務(wù)狀態(tài)信息和預(yù)設(shè)參數(shù)進(jìn)行等待。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述計(jì)數(shù)鎖還用于:當(dāng)至少一個(gè)任務(wù)執(zhí)行失敗時(shí),將計(jì)數(shù)值置為預(yù)設(shè)的特殊值;當(dāng)所有任務(wù)執(zhí)行成功時(shí),將計(jì)數(shù)值置為零。
根據(jù)本申請(qǐng)的一個(gè)實(shí)施例,所述計(jì)數(shù)鎖還包括記錄模塊,用于將所述任務(wù)線程的所述失敗信息記錄在對(duì)應(yīng)的結(jié)構(gòu)化數(shù)據(jù)映射中。
根據(jù)本發(fā)明的實(shí)施例,可以在相關(guān)聯(lián)的任務(wù)中有一個(gè)任務(wù)失敗時(shí)將計(jì)數(shù)鎖釋放,并喚醒調(diào)度線程釋放相關(guān)的其他未執(zhí)行結(jié)束的任務(wù)線程,能夠快速響應(yīng)一個(gè)任務(wù)失敗導(dǎo)致的全體任務(wù)失敗,及時(shí)釋放資源,避免不必要的資源占用;此外,主線程通過(guò)計(jì)數(shù)鎖記錄的失敗原因能夠獲取相應(yīng)的反饋,有利于根據(jù)任務(wù)失敗的原因?qū)ο到y(tǒng)進(jìn)行改進(jìn),進(jìn)而提高系統(tǒng)的自動(dòng)化水平,提高效率。
具體地,如圖4所示是利用計(jì)數(shù)鎖實(shí)現(xiàn)快速失敗的執(zhí)行框架示意圖:
步驟1,初始化計(jì)數(shù)鎖,賦予當(dāng)前鎖一個(gè)任務(wù)組數(shù)量的初值n。其中,在一個(gè)具體實(shí)施例中,還可以為計(jì)數(shù)鎖初始化超時(shí)時(shí)間,當(dāng)整體任務(wù)執(zhí)行時(shí)間超過(guò)超時(shí)時(shí)間時(shí),計(jì)數(shù)鎖置零。
步驟2,主線程將任務(wù)分配到任務(wù)線程開始執(zhí)行。
具體地,主線程調(diào)度線程池中的任務(wù)線程執(zhí)行相應(yīng)的任務(wù),計(jì)數(shù)鎖記錄多個(gè)任務(wù)線程的任務(wù)完成情況。
步驟3,主線程休眠,等待計(jì)數(shù)鎖釋放。
步驟4,當(dāng)任務(wù)線程執(zhí)行任務(wù)成功時(shí),任務(wù)線程控制計(jì)數(shù)鎖將計(jì)數(shù)值減一,并喚醒主線程查看計(jì)數(shù)鎖狀態(tài)。
步驟5,當(dāng)任務(wù)線程執(zhí)行任務(wù)失敗時(shí),任務(wù)線程向計(jì)數(shù)鎖發(fā)送失敗信息,將計(jì)數(shù)值置為預(yù)設(shè)的特殊值,并喚醒主線程。
具體地,任務(wù)線程可以通過(guò)計(jì)數(shù)鎖的預(yù)設(shè)接口對(duì)計(jì)數(shù)鎖中的該線程對(duì)應(yīng)的結(jié)構(gòu)化數(shù)據(jù)映射進(jìn)行修改,也可以是任務(wù)線程向計(jì)數(shù)鎖發(fā)送失敗信息,計(jì)數(shù)鎖根據(jù)該失敗信息和任務(wù)線程的標(biāo)識(shí)修改對(duì)應(yīng)的結(jié)構(gòu)化數(shù)據(jù)映射,并相應(yīng)的修改計(jì)數(shù)值。
在具體的實(shí)施例中,可以通過(guò)設(shè)置超時(shí)時(shí)間來(lái)判斷任務(wù)失敗,也可以通過(guò)所執(zhí)行的任務(wù)代碼本身的返回值來(lái)判斷任務(wù)失敗,還可以通過(guò)重試預(yù)設(shè)次數(shù)后仍失敗來(lái)判斷任務(wù)失敗。這些方式都可以通過(guò)對(duì)任務(wù)代碼本身進(jìn)行設(shè)置或修改來(lái)實(shí)現(xiàn),在此不再贅述。
步驟6,主線程被喚醒后查看計(jì)數(shù)鎖狀態(tài),判斷計(jì)數(shù)鎖是否正常釋放。
其中,預(yù)設(shè)的特殊值例如可以是負(fù)數(shù)、小數(shù)或其他的非0到n之間的正整數(shù)值等,本實(shí)施例以-1為例進(jìn)行說(shuō)明。
具體地,可以通過(guò)計(jì)數(shù)鎖的計(jì)數(shù)值來(lái)判斷是否正常釋放,如果計(jì)數(shù)值為1到n之間的常規(guī)整數(shù)值,則判斷計(jì)數(shù)鎖尚未釋放,執(zhí)行步驟3;如果計(jì)數(shù)值為0,則判斷計(jì)數(shù)鎖為正常釋放,所有任務(wù)線程執(zhí)行完畢且執(zhí)行成功,執(zhí)行步驟7;如果計(jì)數(shù)值為-1,則判斷計(jì)數(shù)鎖為異常釋放,執(zhí)行步驟8。
步驟7,主線程釋放,返回任務(wù)執(zhí)行結(jié)果。
步驟8,主線程取消相關(guān)的其他任務(wù),釋放對(duì)應(yīng)的任務(wù)線程。
步驟9,主線程獲取計(jì)數(shù)鎖記錄的信息,根據(jù)各任務(wù)線程的返回結(jié)果記錄日志。
其中步驟9是可選的,可以通過(guò)步驟9獲取各任務(wù)線程的返回結(jié)果生成日志,通過(guò)后期對(duì)日志的整理總結(jié),對(duì)任務(wù)代碼或系統(tǒng)等進(jìn)行改進(jìn)。
在本申請(qǐng)的具體實(shí)施例中,以任務(wù)是獲取保存在n臺(tái)服務(wù)器上的a賬戶的賬戶信息為例,主線程可以將該任務(wù)分為n個(gè)并行的任務(wù)分配給n個(gè)任務(wù)線程,每個(gè)任務(wù)的內(nèi)容是到其中一臺(tái)服務(wù)器獲取a賬戶存儲(chǔ)在該服務(wù)器上的部分賬戶信息。同時(shí),主線程構(gòu)造一個(gè)初始計(jì)數(shù)值為n的計(jì)數(shù)鎖counter對(duì)各任務(wù)線程的任務(wù)執(zhí)行情況進(jìn)行監(jiān)督。
任務(wù)線程開始執(zhí)行任務(wù)后,主線程進(jìn)入休眠,計(jì)數(shù)鎖開始計(jì)數(shù),計(jì)數(shù)鎖可以設(shè)置 超時(shí)時(shí)間,在超過(guò)預(yù)設(shè)的超時(shí)時(shí)間后判斷任務(wù)失敗,也可以不設(shè)置超時(shí)時(shí)間,只有在計(jì)數(shù)鎖的計(jì)數(shù)值為預(yù)設(shè)值時(shí)才釋放主線程。預(yù)設(shè)值例如是0或預(yù)設(shè)的特殊值。
每當(dāng)有任務(wù)執(zhí)行成功,對(duì)應(yīng)的任務(wù)線程會(huì)向計(jì)數(shù)鎖發(fā)送任務(wù)完成的信息,并通過(guò)通知信號(hào)notify喚醒主線程查看計(jì)數(shù)鎖。計(jì)數(shù)鎖根據(jù)該信息通過(guò)countdown()指令將計(jì)數(shù)值減一,直到所有任務(wù)執(zhí)行成功,計(jì)數(shù)值減為0,任務(wù)整體執(zhí)行完畢,主線程釋放,并返回執(zhí)行結(jié)果。
當(dāng)其中一個(gè)任務(wù)線程失敗時(shí),則無(wú)法完整獲取到a賬戶的賬戶信息,因此該任務(wù)整體失敗,剩余的未完成的相關(guān)任務(wù)線程就都沒(méi)有繼續(xù)執(zhí)行的必要了。此時(shí),失敗的任務(wù)線程將失敗信息(例如失敗原因、錯(cuò)誤代碼等)通過(guò)預(yù)設(shè)接口記錄到計(jì)數(shù)鎖中對(duì)應(yīng)的結(jié)構(gòu)化數(shù)據(jù)映射中,并通過(guò)通知信號(hào)notify喚醒主線程查看計(jì)數(shù)鎖,主線程根據(jù)計(jì)數(shù)鎖的計(jì)數(shù)值為-1判斷計(jì)數(shù)鎖計(jì)數(shù)異常,快速釋放計(jì)數(shù)鎖,停止相關(guān)的其他任務(wù),釋放相關(guān)的任務(wù)線程。判斷任務(wù)執(zhí)行失敗的方法參照步驟5。此外,還可以根據(jù)結(jié)構(gòu)化數(shù)據(jù)映射中記錄的內(nèi)容生成相關(guān)的日志并進(jìn)行錯(cuò)誤分析。
本實(shí)施例可以在相關(guān)聯(lián)的任務(wù)中有一個(gè)任務(wù)失敗時(shí)將計(jì)數(shù)鎖的計(jì)數(shù)值置為預(yù)設(shè)的特殊值,并喚醒主線程釋放相關(guān)的其他任務(wù)線程,能夠快速響應(yīng)一個(gè)任務(wù)失敗導(dǎo)致的全體任務(wù)失敗,及時(shí)釋放資源,避免不必要的資源占用;此外,主線程通過(guò)計(jì)數(shù)鎖記錄的失敗原因能夠獲取相應(yīng)的反饋,有利于根據(jù)任務(wù)失敗的原因?qū)ο到y(tǒng)進(jìn)行改進(jìn),進(jìn)而提高系統(tǒng)的自動(dòng)化水平,提高效率。
需要說(shuō)明的是,在本申請(qǐng)的描述中,術(shù)語(yǔ)“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性。此外,在本申請(qǐng)的描述中,除非另有說(shuō)明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。
流程圖中或在此以其他方式描述的任何過(guò)程或方法描述可以被理解為,表示包括一個(gè)或更多個(gè)用于實(shí)現(xiàn)特定邏輯功能或過(guò)程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本申請(qǐng)的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序,來(lái)執(zhí)行功能,這應(yīng)被本申請(qǐng)的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
應(yīng)當(dāng)理解,本申請(qǐng)的各部分可以用硬件、軟件、固件或它們的組合來(lái)實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來(lái)實(shí)現(xiàn)。例如,如果用硬件來(lái)實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來(lái)實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯 功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現(xiàn)場(chǎng)可編程門陣列(fpga)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。
在本說(shuō)明書的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本申請(qǐng)的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本申請(qǐng)的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對(duì)本申請(qǐng)的限制,本領(lǐng)域的普通技術(shù)人員在本申請(qǐng)的范圍內(nèi)可以對(duì)上述實(shí)施例進(jìn)行變化、修改、替換和變型。