數(shù)據(jù)處理系統(tǒng)以及線程崩潰后的資源恢復(fù)方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種數(shù)據(jù)處理系統(tǒng)以及線程崩潰后的資源恢復(fù)方法和裝置。其中線程崩潰后的資源恢復(fù)方法包括:遍歷資源信息記錄表中每條記錄,其中資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)以及使用該項資源的線程的線程信息;根據(jù)遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù);將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程,使用該方案,可確定出崩潰進(jìn)程所使用資源的資源信息,并將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給重新啟動的線程,而不會對系統(tǒng)中的其它線程造成大量的開銷,可以很快地重啟崩潰線程及對應(yīng)的資源,減小了系統(tǒng)宕機(jī)的風(fēng)險,提高了運行可靠性。
【專利說明】數(shù)據(jù)處理系統(tǒng)以及線程崩潰后的資源恢復(fù)方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別涉及一種數(shù)據(jù)處理系統(tǒng)以及線程崩潰后的資源恢復(fù)方法和裝置。
【背景技術(shù)】
[0002]線程,是程序執(zhí)行流的最小單元。一個標(biāo)準(zhǔn)的線程由線程標(biāo)識(線程ID),當(dāng)前指令指針寄存器集合和堆棧組成。線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。線程是程序中一個單一的順序控制流程。在單個程序中同時運行多個線程完成不同的工作,稱為多線程。
[0003]數(shù)據(jù)處理系統(tǒng),包括計算機(jī)和數(shù)據(jù)路由/轉(zhuǎn)發(fā)設(shè)備,通?;诠蚕碣Y源并發(fā)運行多個線程。每個線程包括一個獨立的執(zhí)行過程,例如一個獨立的并發(fā)運行的任務(wù),該任務(wù)可以利用一個或多個共享資源,資源包括任何可以實現(xiàn)功能的硬件/軟件資源,或者可以被動讓線程利用而實現(xiàn)功能的資源。例如,在一個計算機(jī)系統(tǒng)中,資源可以是一塊內(nèi)存或者內(nèi)存中存儲的某個對象;在一個數(shù)據(jù)路由系統(tǒng)中,資源可以是數(shù)據(jù)包。
[0004]多個線程共享資源的系統(tǒng)中,其中一個線程的突然崩潰可能會導(dǎo)致該線程擁有或者管理的資源處于未定義的狀態(tài),進(jìn)而導(dǎo)致內(nèi)存泄露或者系統(tǒng)重啟狀況。從系統(tǒng)用戶的視角,大型系統(tǒng)的重啟會增加系統(tǒng)宕機(jī)的時間。隨著線程數(shù)目的增多,問題會變得越來越麻煩。
[0005]此外,在現(xiàn)有的數(shù)據(jù)處理系統(tǒng)中使用多核架構(gòu),為了充分利用多核CPU的特性,會使得多線程運行成為必要,同樣,這也會增加由于線程崩潰導(dǎo)致的宕機(jī)風(fēng)險。CPU內(nèi)核越多的大型平臺,線程越多,線程崩潰帶來的問題也更糟糕。
【發(fā)明內(nèi)容】
[0006]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)處理系統(tǒng)以及線程崩潰后的資源恢復(fù)方法和裝置。
[0007]本發(fā)明一個目的是要提供一種線程崩潰后快速恢復(fù)系統(tǒng)共享資源的方法。
[0008]本發(fā)明的進(jìn)一個目的是要防止出現(xiàn)多線程運行帶來的宕機(jī)風(fēng)險。
[0009]根據(jù)本發(fā)明的一個方面,提供了一種線程崩潰后的資源恢復(fù)方法,該線程崩潰后的資源恢復(fù)方法包括:遍歷資源信息記錄表中每條記錄,其中資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)以及使用該項資源的線程的線程信息;根據(jù)遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù);將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程。
[0010]可選地,線程信息包括:線程標(biāo)識和生成該條記錄時的線程崩潰計數(shù);根據(jù)遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù)的步驟包括:獲取全局線程崩潰計數(shù)器的數(shù)值,全局線程崩潰計數(shù)器配置為記錄所有線程的崩潰總數(shù);比較全局線程崩潰計數(shù)器的數(shù)值與生成該條記錄時的線程崩潰計數(shù);在全局線程崩潰計數(shù)器的數(shù)值大于生成該條記錄時的線程崩潰計數(shù)的情況下,判斷該條記錄對應(yīng)的線程是否崩潰;若是,提取該條記錄中的資源元數(shù)據(jù)。
[0011]可選地,判斷該條記錄對應(yīng)的線程是否崩潰的步驟包括:獲取該條記錄的線程標(biāo)識;在線程崩潰表中查詢該條記錄的線程標(biāo)識對應(yīng)的線程崩潰狀態(tài),以確定該條記錄對應(yīng)的線程是否崩潰,其中線程崩潰表中存儲有每個線程的線程標(biāo)識和線程崩潰狀態(tài)。
[0012]可選地,在將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列之后的步驟還包括:掃描是否存在已崩潰線程之外的線程崩潰;若是,重新遍歷資源信息記錄表中每條記錄;若否,判斷資源信息記錄表是否遍歷完成,并在遍歷完成后,將線程崩潰表中的所有線程崩潰狀態(tài)復(fù)位為未崩潰狀態(tài),其中資源信息記錄表以一個多維數(shù)組的形式存儲于內(nèi)存中,多維數(shù)組中包括代表線程標(biāo)識的維度、代表資源元數(shù)據(jù)的維度、代表線程崩潰計數(shù)的維度。
[0013]可選地,在遍歷資源信息記錄表中每條記錄的步驟之前還包括:循環(huán)監(jiān)控運行中的線程;在運行中的線程中的任一個出現(xiàn)崩潰后,對全局線程崩潰計數(shù)器進(jìn)行累加,并確定出現(xiàn)崩潰的線程的線程標(biāo)識;將出現(xiàn)崩潰的線程的線程標(biāo)識在線程崩潰表中對應(yīng)的線程崩潰狀態(tài)標(biāo)示為已經(jīng)崩潰;重啟出現(xiàn)崩潰的線程。
[0014]可選地,循環(huán)監(jiān)控運行中的線程的步驟之前還包括:對資源信息記錄表、全局線程崩潰計數(shù)器、以及線程崩潰表進(jìn)行初始化;接收線程的資源請求;提取發(fā)出資源請求的線程的線程信息,以及所請求資源的資源元數(shù)據(jù);將所請求資源的資源元數(shù)據(jù)存儲于資源分配隊列中,以按照資源分配隊列檢索資源元數(shù)據(jù)并將對應(yīng)的資源分配給線程;從全局線程崩潰計數(shù)器中獲取當(dāng)前線程崩潰計數(shù);將資源請求的線程的線程信息、所請求資源的資源元數(shù)據(jù)、當(dāng)前線程崩潰計數(shù)匹配保存為信息記錄表中的一條記錄。
[0015]根據(jù)本發(fā)明的另一個方面,提供了一種線程崩潰后的資源恢復(fù)裝置,該線程崩潰后的資源恢復(fù)裝置包括:資源信息遍歷模塊,配置為遍歷資源信息記錄表中每條記錄,其中資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)、使用該項資源的線程的線程信息;元數(shù)據(jù)提取模塊,配置為根據(jù)遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù);隊列處理模塊,配置為將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程。
[0016]可選地,線程信息包括:線程標(biāo)識和生成該條記錄時的線程崩潰計數(shù);元數(shù)據(jù)提取模塊包括:計數(shù)獲取子模塊,配置為獲取全局線程崩潰計數(shù)器的數(shù)值,全局線程崩潰計數(shù)器配置為記錄所有線程的崩潰總數(shù);比較子模塊,配置為比較全局線程崩潰計數(shù)器的數(shù)值與生成該條記錄時的線程崩潰計數(shù);判斷子模塊,配置為在全局線程崩潰計數(shù)器的數(shù)值大于生成該條記錄時的線程崩潰計數(shù)的情況下,獲取該條記錄的線程標(biāo)識,在線程崩潰表中查詢該條記錄的線程標(biāo)識對應(yīng)的線程崩潰狀態(tài),以確定該條記錄對應(yīng)的線程是否崩潰,其中線程崩潰表中存儲有每個線程的線程標(biāo)識和線程崩潰狀態(tài);數(shù)據(jù)提取子模塊,配置為在判斷子模塊的判斷結(jié)果為是時,提取該條記錄中的資源元數(shù)據(jù)。
[0017]可選地,上述資源恢復(fù)裝置還包括線程判斷模塊和線程監(jiān)控模塊,其中線程判斷模塊,配置為掃描是否存在已崩潰線程之外的線程崩潰;資源信息遍歷模塊,還配置為在線程判斷子模塊的判斷結(jié)果為是時,重新遍歷資源信息記錄表中每條記錄,并在線程判斷子模塊的判斷結(jié)果為否時,判斷資源信息記錄表是否遍歷完成,確定遍歷完成后,將線程崩潰表中的所有線程崩潰狀態(tài)復(fù)位為未崩潰狀態(tài);線程監(jiān)控模塊,配置為:循環(huán)監(jiān)控運行中的線程;在運行中的線程中的任一個出現(xiàn)崩潰后,對全局線程崩潰計數(shù)器進(jìn)行累加,并確定出現(xiàn)崩潰的線程的線程標(biāo)識;將出現(xiàn)崩潰的線程的線程標(biāo)識在線程崩潰表中對應(yīng)的線程崩潰狀態(tài)標(biāo)示為已經(jīng)崩潰;重啟出現(xiàn)崩潰的線程。
[0018]可選地,上述資源恢復(fù)裝置還包括:初始化模塊和資源分配模塊,其中初始化模塊配置為:對資源信息記錄表、全局線程崩潰計數(shù)器、以及線程崩潰表進(jìn)行初始化,資源分配模塊配置為:接收線程的資源請求;提取發(fā)出資源請求的線程的線程信息,以及所請求資源的資源元數(shù)據(jù);將所請求資源的資源元數(shù)據(jù)存儲于資源分配隊列中,以按照資源分配隊列檢索資源元數(shù)據(jù)并將對應(yīng)的資源分配給線程;從全局線程崩潰計數(shù)器中獲取當(dāng)前線程崩潰計數(shù);將資源請求的線程的線程信息、所請求資源的資源元數(shù)據(jù)、當(dāng)前線程崩潰計數(shù)匹配保存為信息記錄表中的一條記錄。
[0019]根據(jù)本發(fā)明另一個方面,還提供了一種數(shù)據(jù)處理系統(tǒng),并發(fā)運行有多個線程,該數(shù)據(jù)處理系統(tǒng)包括:處理器,配置為執(zhí)行以上介紹的任一種線程崩潰后的資源恢復(fù)方法;內(nèi)存,配置為保存資源信息記錄表、線程崩潰表、資源分配隊列、以及全局線程崩潰計數(shù)器。
[0020]可選地,處理器還配置為:處理從網(wǎng)絡(luò)中獲取的數(shù)據(jù)單元,并將數(shù)據(jù)單元的頭部信息存儲到內(nèi)存的資源信息記錄表中。
[0021]本發(fā)明的線程崩潰后的資源恢復(fù)方法和裝置可以在線程崩潰后,遍歷資源信息記錄表中每條記錄,確定出崩潰進(jìn)程所使用資源的資源信息,并將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給重新啟動的線程,從而恢復(fù)所有的資源,而不會對系統(tǒng)中的其他線程造成大量的開銷,可以很快地重啟崩潰線程及對應(yīng)的資源,減小了系統(tǒng)宕機(jī)的風(fēng)險,提高了運行可靠性。
[0022]進(jìn)一步地,本發(fā)明的數(shù)據(jù)處理系統(tǒng),利用以上線程崩潰后的資源恢復(fù)方法,可對其運行多個線程進(jìn)行監(jiān)控和崩潰快速處理,資源開銷小,并且不影響正常線程的執(zhí)行。
[0023]本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
[0024]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
[0025]根據(jù)下文結(jié)合附圖對本發(fā)明具體實施例的詳細(xì)描述,本領(lǐng)域技術(shù)人員將會更加明了本發(fā)明的上述以及其他目的、優(yōu)點和特征。
【專利附圖】
【附圖說明】
[0026]通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0027]圖1是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置的應(yīng)用環(huán)境示意圖;
[0028]圖2是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置的硬件實現(xiàn)架構(gòu)的示意圖;
[0029]圖3是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置的結(jié)構(gòu)示意圖;
[0030]圖4是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置中數(shù)據(jù)應(yīng)用的示意圖;
[0031]圖5是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中資源信息記錄表的不意圖;
[0032]圖6是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中線程崩潰表的示意圖;
[0033]圖7是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中資源分配隊列的示意圖;
[0034]圖8是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法的示意圖;
[0035]圖9是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中生成資源信息記錄表的流程圖;
[0036]圖10是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中線程崩潰重啟的流程圖;
[0037]圖11是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中進(jìn)行資源分配的流程圖;
[0038]圖12是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中一種可選流程圖;以及
[0039]圖13是根據(jù)本發(fā)明一個實施例的數(shù)據(jù)處理系統(tǒng)應(yīng)用于網(wǎng)絡(luò)設(shè)備的示意圖。
【具體實施方式】
[0040]以下將結(jié)合附圖及實施例來詳細(xì)說明本發(fā)明的實施方式,借此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實現(xiàn)過程能充分理解并據(jù)以實施。需要說明的是,只要不構(gòu)成沖突,本發(fā)明中的各個實施例以及各實施例中的各個特征可以相互結(jié)合,所形成的技術(shù)方案均在本發(fā)明的保護(hù)范圍之內(nèi)。
[0041]另外,在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0042]圖1是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置100的應(yīng)用環(huán)境示意圖,在該應(yīng)用環(huán)境中,多個不同的線程訪問共享資源池中的資源,示例環(huán)境包括一個本實施例提供的線程崩潰后的資源恢復(fù)裝置100、共享資源和多個線程(用線程I到線程N(yùn)標(biāo)識)。
[0043]本實施例提供的線程崩潰后的資源恢復(fù)裝置100配置為實現(xiàn)恢復(fù)線程崩潰后續(xù)共享資源的功能。當(dāng)線程完全停止執(zhí)行它預(yù)期的操作或者功能,并且停止響應(yīng)或者不以預(yù)期的方式在示例環(huán)境中進(jìn)行互動,即確定線程崩潰。線程I至線程N(yùn)中每個線程包括正在執(zhí)行任務(wù)的程序,與共享資源進(jìn)行交互。
[0044]共享資源可以包括多種資源,用資源I至資源N標(biāo)識,這些資源可以是任何硬件或者軟件資源,它們可以執(zhí)行功能或者可以被用于線程中實現(xiàn)功能。在某些可選實施例中,從資源I至資源N的每個資源可以包括一塊內(nèi)存或者內(nèi)存中存儲的一個對象或者內(nèi)存中存儲的數(shù)據(jù)(例如:元數(shù)據(jù)包頭和內(nèi)存中存儲的包有效載荷等)。
[0045]圖2是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置100的硬件實現(xiàn)架構(gòu)的示意圖,如圖2所示,本實施例提供的線程崩潰后的資源恢復(fù)裝置100的應(yīng)用環(huán)境可以在配備處理器207的計算設(shè)備中實現(xiàn),例如,一個臺式機(jī)或筆記本電腦或服務(wù)器,其中處理器207負(fù)責(zé)處理數(shù)據(jù)。資源恢復(fù)裝置100包括總線208,處理器207,主存203,只讀存儲器204和存儲設(shè)備205,輸入設(shè)備201,輸出設(shè)備202和通訊接口 206,總線208負(fù)責(zé)提供這些組件之間的數(shù)據(jù)傳送途徑。
[0046]處理器207包括微處理器(交互或者執(zhí)行指令的處理邏輯)或者并行處理器;主存203包括隨機(jī)訪問內(nèi)存(ram)或者其它的動態(tài)存儲設(shè)備(可以存儲處理器執(zhí)行的信息或者指令);只讀存儲器204包括只讀存儲器設(shè)備或者另外的靜態(tài)存儲設(shè)備(存儲處理器用到的靜態(tài)信息和指令),存儲設(shè)備205包括磁或光記錄介質(zhì)以及相應(yīng)的驅(qū)動器;輸入設(shè)備201包括鍵盤,鼠標(biāo),光筆語音識別或者生物識別設(shè)備等。輸出設(shè)備203包括顯示器,打印機(jī)等,通訊接口包括任何類似收發(fā)器的設(shè)備,使得系統(tǒng)可以和其它的設(shè)備或者系統(tǒng)進(jìn)行交互。
[0047]資源恢復(fù)裝置100能夠執(zhí)行一定的操作或進(jìn)程,作為對處理器207執(zhí)行主存中的軟件指令的響應(yīng);一個可讀的計算機(jī)介質(zhì)被定義為物理或者邏輯內(nèi)存設(shè)備。一個邏輯內(nèi)存設(shè)備包括一個單獨的物理內(nèi)存設(shè)備空間或者跨越多個設(shè)備的內(nèi)存空間。軟件指令可以從存儲設(shè)備205,或者通過通訊接口 206讀入主存203,主存203中的軟件指令可被處理器207調(diào)用以執(zhí)行特定的功能,或者,可以用硬件連線電路來代替或者結(jié)合軟件指令以實現(xiàn)本實施例原理一致的過程。
[0048]圖3是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置100的結(jié)構(gòu)示意圖,該線程崩潰后的資源恢復(fù)裝置100 —般性地可以包括:資源信息遍歷模塊110、元數(shù)據(jù)提取模塊120、隊列處理模塊130、線程判斷模塊140、線程監(jiān)控模塊150、初始化模塊160、資源分配模塊170。以上模塊可以根據(jù)本實施例的線程崩潰后的資源恢復(fù)裝置100的功能和配置靈活進(jìn)行配置,在一些可選實施例中,可以不同時配置以上所有模塊。另外,以上元數(shù)據(jù)提取模塊120還可以包括:計數(shù)獲取子模塊121、比較子模塊122、判斷子模塊123、數(shù)據(jù)提取子模塊124。
[0049]資源信息遍歷模塊110配置為遍歷資源信息記錄表中每條記錄,其中資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)、使用該項資源的線程的線程信息。元數(shù)據(jù)提取模塊120配置為根據(jù)遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù);隊列處理模塊130配置為將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程。
[0050]本實施例的線程崩潰后的資源恢復(fù)裝置100在線程崩潰后,遍歷資源信息記錄表中每條記錄,確定出崩潰進(jìn)程所使用資源的資源信息,并將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給重新啟動的線程,從而快速恢復(fù)了所有資源,而不會對系統(tǒng)中的其他線程造成大量的開銷,可以很快地重啟崩潰線程并分配對應(yīng)的資源,減小了系統(tǒng)宕機(jī)的風(fēng)險,提高了多線程并行的數(shù)據(jù)處理系統(tǒng)的運行可靠性。
[0051]資源信息記錄表中記錄的線程信息包括:線程標(biāo)識和生成該條記錄時的線程崩潰計數(shù)。元數(shù)據(jù)提取模塊120的一種可選結(jié)構(gòu)為:計數(shù)獲取子模塊121配置為獲取全局線程崩潰計數(shù)器的數(shù)值,該全局線程崩潰計數(shù)器配置為記錄所有線程的崩潰總數(shù);比較子模塊122配置為比較全局線程崩潰計數(shù)器的數(shù)值與生成該條記錄時的線程崩潰計數(shù);判斷子模塊123配置為在全局線程崩潰計數(shù)器的數(shù)值大于生成該條記錄時的線程崩潰計數(shù)的情況下,獲取該條記錄的線程標(biāo)識,在線程崩潰表中查詢該條記錄的線程標(biāo)識對應(yīng)的線程崩潰狀態(tài),以確定該條記錄對應(yīng)的線程是否崩潰,其中線程崩潰表中存儲有每個線程的線程標(biāo)識和線程崩潰狀態(tài);數(shù)據(jù)提取子模塊124配置為在判斷子模塊123的判斷結(jié)果為是時,提取該條記錄中的資源元數(shù)據(jù)。
[0052]本實施例的資源恢復(fù)裝置100可以利用線程監(jiān)控模塊150來確定線程是否崩潰,一種可選的方式為線程監(jiān)控模塊150配置為:循環(huán)監(jiān)控運行中的線程;在運行中的線程中的任一個出現(xiàn)崩潰后,對全局線程崩潰計數(shù)器進(jìn)行累加,并確定出現(xiàn)崩潰的線程的線程標(biāo)識;將出現(xiàn)崩潰的線程的線程標(biāo)識在線程崩潰表中對應(yīng)的線程崩潰狀態(tài)標(biāo)示為已經(jīng)崩潰;重啟出現(xiàn)崩潰的線程。
[0053]在資源信息遍歷模塊110進(jìn)行遍歷資源信息記錄表的過程中,線程判斷模塊140還可以掃描是否存在已崩潰線程之外的線程崩潰,資源信息遍歷模塊110在線程判斷子模塊140的判斷結(jié)果為是時,重新遍歷資源信息記錄表中每條記錄,并在線程判斷子模塊140的判斷結(jié)果為否時,判斷資源信息記錄表是否遍歷完成,確定遍歷完成后,將線程崩潰表中的所有線程崩潰狀態(tài)復(fù)位為未崩潰狀態(tài)。
[0054]另外,初始化模塊160在本實施例的資源恢復(fù)裝置100啟動后首先可以對資源信息記錄表、全局線程崩潰計數(shù)器、以及線程崩潰表進(jìn)行初始化,以便執(zhí)行后續(xù)的流程。
[0055]完成初始化后,資源分配模塊170可以執(zhí)行以下步驟:接收線程的資源請求;提取發(fā)出資源請求的線程的線程信息,以及所請求資源的資源元數(shù)據(jù);將所請求資源的資源元數(shù)據(jù)存儲于資源分配隊列中,以按照資源分配隊列檢索資源元數(shù)據(jù)并將對應(yīng)的資源分配給線程;從全局線程崩潰計數(shù)器中獲取當(dāng)前線程崩潰計數(shù);將資源請求的線程的線程信息、所請求資源的資源元數(shù)據(jù)、當(dāng)前線程崩潰計數(shù)匹配保存為信息記錄表中的一條記錄。資源分配模塊170隨后可以按照資源分配隊列進(jìn)行資源分配,在本實施例的資源恢復(fù)裝置100中的隊列處理模塊130將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列后,資源分配模塊170可以將其重新分配給重啟后的線程。
[0056]圖4是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)裝置100中數(shù)據(jù)應(yīng)用的示意圖,線程崩潰后的資源恢復(fù)裝置100與共享資源、資源信息記錄表(可以為資源元數(shù)據(jù)數(shù)組形式)、全局線程崩潰計數(shù)器、線程崩潰表、資源分配隊列分別建立數(shù)據(jù)連接。其中,資源信息記錄表、全局線程崩潰計數(shù)器、線程崩潰表和資源分配隊列可以存儲在內(nèi)存203中。
[0057]在出現(xiàn)線程崩潰時,線程崩潰后的資源恢復(fù)裝置100可以與全局線程崩潰計數(shù)器、線程崩潰表和資源分配隊列相結(jié)合,一起恢復(fù)共享資源。
[0058]資源信息記錄表存儲一組元數(shù)據(jù),資源元數(shù)據(jù)可存儲在數(shù)組中,或者通過資源恢復(fù)管理單元從數(shù)組中檢索得到。其中以數(shù)組元素存儲的元數(shù)據(jù)與共享資源中的單個資源相關(guān)聯(lián)。元數(shù)據(jù)(Meta Data)是指在數(shù)據(jù)有關(guān)數(shù)據(jù)源定義,目標(biāo)定義,轉(zhuǎn)換規(guī)則等相關(guān)的關(guān)鍵數(shù)據(jù)。元數(shù)據(jù)是一種二進(jìn)制信息,用以對存儲在公共語言運行庫可移植可執(zhí)行文件或存儲在內(nèi)存中的程序進(jìn)行描述。當(dāng)執(zhí)行代碼時,運行庫將元數(shù)據(jù)加載到內(nèi)存中,并引用它來發(fā)現(xiàn)有關(guān)代碼的類、成員、繼承等信息。
[0059]元數(shù)據(jù)以非特定語言的方式描述在代碼中定義的每一類型和成員。元數(shù)據(jù)存儲以下信息:程序集的說明;標(biāo)識(名稱、版本、區(qū)域性、公鑰);導(dǎo)出的類型;該程序集所依賴的其他程序集;運行所需的安全權(quán)限;類型的說明;名稱、可見性、基類和實現(xiàn)的接口 ;成員(方法、字段、屬性、事件、嵌套的類型);屬性;修飾類型和成員的其他說明性元素。
[0060]資源元數(shù)據(jù)存儲某個特定資源的元數(shù)據(jù),例如,如果這個資源包括數(shù)據(jù)包,則元數(shù)據(jù)包括包頭元數(shù)據(jù)信息。線程標(biāo)識域字段識別當(dāng)前已分配相應(yīng)資源元數(shù)據(jù)相關(guān)聯(lián)的資源線程。
[0061]資源信息記錄表可以用一個多維數(shù)組的形式存儲于內(nèi)存中,多維數(shù)組中包括代表線程標(biāo)識的維度、代表資源元數(shù)據(jù)的維度、代表線程崩潰計數(shù)的維度。圖5是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中資源信息記錄表的示意圖,資源元數(shù)據(jù)存儲某個特定資源的元數(shù)據(jù),例如,如果這個資源包括數(shù)據(jù)包,則元數(shù)據(jù)可能包括包頭元數(shù)據(jù)信息。線程標(biāo)識域字段識別當(dāng)前已分配相應(yīng)資源元數(shù)據(jù)相關(guān)聯(lián)的資源線程。線程崩潰計數(shù)器域存儲資源的元數(shù)據(jù)加入資源信息記錄表時全局線程崩潰計數(shù)器的取值,線程崩潰計數(shù)器域存儲資源的元數(shù)據(jù)加入元數(shù)據(jù)數(shù)組時全局線程崩潰計數(shù)器的取值。在圖5中資源_1對應(yīng)于資源元數(shù)據(jù)_1,其被線程ID_1使用,資源_1的元數(shù)據(jù)I的資源元數(shù)據(jù)_1加入資源信息記錄表時,全局線程崩潰計數(shù)器記錄全部線程的崩潰次數(shù)。
[0062]全局線程崩潰計數(shù)器維持計數(shù)器取值。存儲在全局線程崩潰計數(shù)器中的計數(shù)器維持線程I至線程N(yùn)崩潰的次數(shù)累計之和。
[0063]線程崩潰表存儲與每個線程相關(guān)的線程標(biāo)示符線程ID,同時還有線程崩潰標(biāo)示符,它指示是否相應(yīng)的線程處于崩潰狀態(tài),線程崩潰表維持一個記錄表,它記錄線程I至線程N(yùn)中哪些線程處于崩潰狀態(tài)。圖6是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中線程崩潰表的示意圖,如圖6所示,線程崩潰表包括多個入口,每個入口包括一個線程標(biāo)示符域,線程標(biāo)示符域唯一標(biāo)示線程I至線程N(yùn)。線程崩潰指示符域指示線程標(biāo)示符域中的線程是否已經(jīng)崩潰。線程崩潰指示符可以采用指針的形式,例如線程崩潰指針可以包括兩種狀態(tài):未崩潰(否)和已崩潰(是),可以將指針值I對應(yīng)表示為線程崩潰,將指針值O對應(yīng)標(biāo)識為線程正常運行。
[0064]資源分配隊列暫時存儲與資源相關(guān)的元數(shù)據(jù),隨后該資源可能會被某個線程請求,或者某個正處于崩潰狀態(tài)的線程正在使用該資源。在資源恢復(fù)過程中,如果某個資源預(yù)先要分配給某個線程,則資源恢復(fù)管理單元從隊列中檢索資源的元數(shù)據(jù)。圖7是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中資源分配隊列的示意圖,資源分配隊列存儲多個資源元數(shù)據(jù)子項目(資源元數(shù)據(jù)子項目I至資源元數(shù)據(jù)子項目N),這些資源元數(shù)據(jù)從本實施例的資源恢復(fù)裝置100獲得。存儲在資源分配隊列中的資源元數(shù)據(jù)與線程標(biāo)識域關(guān)聯(lián),該域指示線程集合中的某個線程可能請求資源的使用信息,不同資源具有各自的資源元數(shù)據(jù)。資源元數(shù)據(jù)存儲在資源分配隊列中,直到各自資源分配給線程標(biāo)示符標(biāo)示的線程(或者預(yù)先分配資源以防線程崩潰)。
[0065]本發(fā)明實施例還提供了一種線程崩潰后的資源恢復(fù)方法,該線程崩潰后的資源恢復(fù)方法可以由以上實施例中介紹的線程崩潰后的資源恢復(fù)裝置100執(zhí)行,以在線程崩潰后快速恢復(fù)系統(tǒng)共享資源。圖8是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法的示意圖,該線程崩潰后的資源恢復(fù)方法一般性地可以包括以下步驟:
[0066]步驟S802,遍歷資源信息記錄表中每條記錄;
[0067]步驟S804,根據(jù)遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù);
[0068]步驟S806,將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程。
[0069]資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)以及使用該項資源的線程的線程信息;利用資源信息記錄表可以快速搜索到線程與其所使用資源的對應(yīng)關(guān)系O
[0070]資源信息記錄表中記錄的線程信息包括:線程標(biāo)識和生成該條記錄時的線程崩潰計數(shù)。從而步驟S802的一種可選流程為:獲取全局線程崩潰計數(shù)器的數(shù)值,全局線程崩潰計數(shù)器配置為記錄所有線程的崩潰總數(shù);比較全局線程崩潰計數(shù)器的數(shù)值與生成該條記錄時的線程崩潰計數(shù);在全局線程崩潰計數(shù)器的數(shù)值大于生成該條記錄時的線程崩潰計數(shù)的情況下,判斷該條記錄對應(yīng)的線程是否崩潰;若是,提取該條記錄中的資源元數(shù)據(jù)。
[0071]判斷資源信息記錄表某條記錄對應(yīng)的線程是否崩潰的具體步驟可以包括:獲取該條記錄的線程標(biāo)識;在線程崩潰表中查詢該條記錄的線程標(biāo)識對應(yīng)的線程崩潰狀態(tài),以確定該條記錄對應(yīng)的線程是否崩潰,其中線程崩潰表中存儲有每個線程的線程標(biāo)識和線程崩潰狀態(tài)。
[0072]在遍歷資源信息記錄表的過程中,每掃描結(jié)束一條記錄后,本實施例的線程崩潰后的資源恢復(fù)方法還需要掃描是否存在已崩潰線程之外的線程崩潰;若是,重新遍歷資源信息記錄表中每條記錄;若否,判斷資源信息記錄表是否遍歷完成,并在遍歷完成后,將線程崩潰表中的所有線程崩潰狀態(tài)復(fù)位為未崩潰狀態(tài)。
[0073]為了及時確定線程的運行狀態(tài),在步驟S802之前,還需要循環(huán)監(jiān)控運行中的線程;在運行中的線程中的任一個出現(xiàn)崩潰后,對全局線程崩潰計數(shù)器進(jìn)行累加,并確定崩潰線程的線程標(biāo)識;將出現(xiàn)崩潰的線程的線程標(biāo)識在線程崩潰表中對應(yīng)的線程崩潰狀態(tài)標(biāo)示為已經(jīng)崩潰;重啟出現(xiàn)崩潰的線程。從而及時更新全局線程崩潰計數(shù)器和線程崩潰表的狀態(tài)。
[0074]在執(zhí)行本實施例的線程崩潰后的資源恢復(fù)方法的系統(tǒng)啟動后,需要首先對資源信息記錄表、全局線程崩潰計數(shù)器、以及線程崩潰表進(jìn)行初始化;然后接收線程的資源請求;提取發(fā)出資源請求的線程的線程信息,以及所請求資源的資源元數(shù)據(jù);將所請求資源的資源元數(shù)據(jù)存儲于資源分配隊列中,以按照資源分配隊列檢索資源元數(shù)據(jù)并將對應(yīng)的資源分配給線程;從全局線程崩潰計數(shù)器中獲取當(dāng)前線程崩潰計數(shù);將資源請求的線程的線程信息、所請求資源的資源元數(shù)據(jù)、當(dāng)前線程崩潰計數(shù)匹配保存為信息記錄表中的一條記錄。完成本實施例的線程崩潰后的資源恢復(fù)方法的準(zhǔn)備流程。
[0075]圖9是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中生成資源信息記錄表的流程圖,該生成資源信息記錄表的流程包括:
[0076]步驟S902,按照預(yù)設(shè)的順序循環(huán)每個資源;
[0077]步驟S904,接收資源數(shù)據(jù),包括接收資源元數(shù)據(jù),當(dāng)給定的資源被標(biāo)示為線程請求使用時,接收資源的元數(shù)據(jù)。
[0078]步驟S904,將接收的資源元數(shù)據(jù)存儲在資源信息記錄表中。此時需要從全局崩潰計數(shù)器中獲取數(shù)值,以作為判斷線程崩潰時間的依據(jù)。
[0079]存儲的元數(shù)據(jù)與資源信息記錄表中的資源元數(shù)據(jù)的特定資源相關(guān)聯(lián)。例如,如果給定的資源是數(shù)據(jù)包,資源恢復(fù)裝置在數(shù)組中的資源元數(shù)據(jù)中存儲包的頭部元數(shù)據(jù)。
[0080]對于共享資源中的每個資源,均可以有選擇性的循環(huán)執(zhí)行。
[0081]圖10是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中線程崩潰重啟的流程圖,該線程重啟流程包括:
[0082]步驟S1002,初始化全局線程崩潰計數(shù)器,例如設(shè)置全局線程崩潰計數(shù)器至1,在系統(tǒng)初始化或者重啟時,全局線程崩潰計數(shù)器被初始化為1,隨后,每當(dāng)資源恢復(fù)單元檢測到線程崩潰時,其計數(shù)器取值加I。
[0083]步驟S1004,判斷是否有線程崩潰,可以通過監(jiān)控線程隊列以判斷是否有線程崩潰,如果當(dāng)前線程沒有崩潰,則循環(huán)監(jiān)控下一線程;
[0084]步驟S1006,如果當(dāng)前線程崩潰,全局線程崩潰計數(shù)器的取值加I ;
[0085]步驟S1008,識別崩潰線程的線程ID ;
[0086]步驟S1010,設(shè)置線程崩潰表中對應(yīng)于崩潰線程的線程崩潰指針,該步驟的一種具體執(zhí)行方式為根據(jù)該線程ID找到崩潰線程在線程崩潰表中入口,入口對應(yīng)的線程ID字段與崩潰的線程ID是對應(yīng)的,設(shè)置入口對應(yīng)的線程崩潰指針標(biāo)識崩潰狀態(tài)為是,以標(biāo)識線程已經(jīng)崩潰;
[0087]步驟S1012,重啟崩潰的線程,在線程重啟過程,已崩潰的線程進(jìn)行資源的重分配,分配的方法即執(zhí)行本實施例的線程崩潰后的資源恢復(fù)方法。
[0088]以上線程崩潰的監(jiān)控過程,可以按照預(yù)設(shè)的順序有選擇性地對線程進(jìn)行循環(huán)。
[0089]圖11是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中進(jìn)行資源分配的流程圖,該資源分配的流程包括:
[0090]步驟SI 102,接收線程的資源請求,線程I至線程N(yùn)中的任意一個線程請求對應(yīng)的資源,該資源的元數(shù)據(jù)存儲在資源信息記錄表中;
[0091]步驟SI 104,按照資源請求將資源元數(shù)據(jù)存儲于資源分配隊列中,一種可選方式為從資源信息記錄表中檢索被請求資源的元數(shù)據(jù)并將檢索到的元數(shù)據(jù)和請求線程的線程ID一并存儲在隊列中;
[0092]步驟S1106,從資源分配隊列中檢索資源元數(shù)據(jù)以分配資源給線程,此時,可以從資源分配隊列中檢索元數(shù)據(jù)及線程ID,該隊列可使用各種預(yù)先設(shè)定的機(jī)制,例如采用基于先來先服務(wù)機(jī)制,以及優(yōu)先級機(jī)制等;
[0093]步驟S1108,獲得全局線程崩潰計數(shù)器的當(dāng)前值;
[0094]步驟S1110,將獲得的全局線程崩潰計數(shù)器的取值和請求的資源元數(shù)據(jù)相關(guān)聯(lián),存儲于資源信息記錄表中;
[0095]步驟S1112,關(guān)聯(lián)線程的線程ID和分配的資源。
[0096]在以上流程中,可以將線程的線程ID存儲在資源信息記錄表的線程ID域中,同時將資源的元數(shù)據(jù)存儲在資源信息記錄表的元數(shù)據(jù)域中,并且以上資源分配流程可以對線程隊列中的任意資源請求重復(fù)執(zhí)行。
[0097]圖12是根據(jù)本發(fā)明一個實施例的線程崩潰后的資源恢復(fù)方法中一種可選流程圖,該流程可由以上實施例中的資源恢復(fù)裝置所執(zhí)行。該資源恢復(fù)方法包括以下步驟:
[0098]步驟S1202,監(jiān)控線程的運行狀態(tài),確定是否存在線程崩潰,監(jiān)控的方式可以采用循環(huán)監(jiān)控線程I至線程N(yùn)是否響應(yīng)正常以確認(rèn)是否有線程崩潰,如果沒有線程崩潰,則循環(huán)監(jiān)控下一線程;
[0099]步驟S1204,如果有線程崩潰,則遍歷資源信息記錄表中的資源元數(shù)據(jù)以獲得資源元數(shù)據(jù)的下一條目,在示例性過程中遍歷數(shù)據(jù)數(shù)組第一次執(zhí)行時,資源元數(shù)據(jù)的下一條目即是數(shù)據(jù)數(shù)組的第一個資源元數(shù)據(jù)條目,可順序一步一步的方式遍歷資源信息記錄表,使得遍歷資源信息記錄表中的每個資源元數(shù)據(jù)能夠被分析以確定是否有相應(yīng)的資源需要恢復(fù);
[0100]步驟S1206,獲取全局線程崩潰計數(shù)器的當(dāng)前值;
[0101]步驟S1208,對比全局線程崩潰計數(shù)器的取值與資源信息記錄表中的線程崩潰計數(shù)器的數(shù)值,確定該線程崩潰的時間早于遍歷該線程的時間,以保證不是在遍歷線程后出現(xiàn)的線程崩潰;
[0102]步驟S1210,判斷全局線程崩潰計數(shù)器的值是否大于資源存儲的線程崩潰計數(shù)器取值,如果全局線程崩潰計數(shù)器的取值小于等于該資源的線程崩潰計數(shù)器的取值,則示例性進(jìn)程返回資源信息記錄表中的下一個資源元數(shù)據(jù);
[0103]步驟S1212,如果全局線程崩潰計數(shù)器的取值大于資源的線程崩潰計數(shù)器,獲取該崩潰線程的線程ID;
[0104]步驟S1214,獲取該線程ID對應(yīng)的崩潰指針,該崩潰指針記錄于線程崩潰表中,因此可根據(jù)線程ID在線程崩潰表中查找出對應(yīng)的線程崩潰指針;
[0105]步驟S1216,根據(jù)崩潰指針確定該線程是否已經(jīng)崩潰,例如獲取的線程崩潰表中的崩潰指針值設(shè)置為I指示線程崩潰,以及或者崩潰指針值設(shè)置為O指示線程并不處于‘崩潰’狀態(tài)。如果線程崩潰表不指示線程已經(jīng)崩潰,則示例性過程返回遍歷資源信息記錄表中的下一個資源元數(shù)據(jù);
[0106]步驟S1218,如果線程崩潰表顯示線程已經(jīng)崩潰,則資源的資源元數(shù)據(jù)會插入到資源分配隊列,從分配隊列中取得資源元數(shù)據(jù)和線程ID,可以給線程ID對應(yīng)的線程重新分配資源。從隊列中取得資源元數(shù)據(jù)可以基于各種不同的機(jī)制,例如,基于先來先服務(wù)機(jī)制,或者基于分配給每個線程或者每個資源的優(yōu)先權(quán)優(yōu)先機(jī)制等。或者,在線程崩潰之后,我們不是重新給該線程分配資源,而是釋放該資源,將資源返回至可用的資源池以備將來使用;
[0107]步驟S1220,判斷是否有當(dāng)前遍歷的線程之外的線程崩潰;
[0108]步驟S1222,如果有其他的線程崩潰了,則重新遍歷數(shù)據(jù)數(shù)組中的資源元數(shù)據(jù);
[0109]步驟S1224,判斷資源信息記錄表遍歷是否完成,從而可以一步一步遍歷的方式遍歷資源信息記錄表(從資源元數(shù)據(jù)數(shù)組的第一個條目開始,這樣資源信息記錄表中的每個資源元數(shù)據(jù)可以得到成功分析以確定相應(yīng)的資源需要恢復(fù)),如果數(shù)據(jù)數(shù)組中的資源元數(shù)據(jù)沒有遍歷完全,則會重復(fù)這一過程遍歷下一個資源元數(shù)據(jù);
[0110]步驟S1226,如果資源信息記錄表中的所有資源元數(shù)據(jù)已經(jīng)遍歷完全,則所有的線程崩潰表被清空。
[0111]最后返回循環(huán)進(jìn)行其他線程崩潰檢測。
[0112]在清除所有的線程崩潰表之前,通過訪問資源信息記錄表以遍歷所有的資源元數(shù)據(jù)。資源可能同時修復(fù)或重啟,并且?guī)缀跬瑫r伴隨著崩潰線程重新分配。因此,以上流程的資源元數(shù)據(jù)的遍歷可以作為后臺進(jìn)程執(zhí)行。
[0113]本實施例還提供了一種數(shù)據(jù)處理系統(tǒng),并發(fā)運行有多個線程,該數(shù)據(jù)處理系統(tǒng)包括:處理器,配置為執(zhí)行以上實施例中介紹的任一種線程崩潰后的資源恢復(fù)方法;內(nèi)存,配置為保存資源信息記錄表、線程崩潰表、資源分配隊列、以及全局線程崩潰計數(shù)器。其中處理器還配置為:處理從網(wǎng)絡(luò)中獲取的數(shù)據(jù)單元,并將數(shù)據(jù)單元的頭部信息存儲到內(nèi)存的資源信息記錄表中。
[0114]圖13是根據(jù)本發(fā)明一個實施例的數(shù)據(jù)處理系統(tǒng)應(yīng)用于網(wǎng)絡(luò)設(shè)備的示意圖,該應(yīng)用環(huán)境中,網(wǎng)絡(luò)設(shè)備中作為轉(zhuǎn)發(fā)包或者其它數(shù)據(jù)單元的路由器實現(xiàn)。路由器從物理鏈路中接收一個或者多個數(shù)據(jù)流包,處理數(shù)據(jù)流決定目的地址信息,并根據(jù)目的端地址信息在一條或者多條鏈路上傳輸數(shù)據(jù)流。
[0115]網(wǎng)絡(luò)設(shè)備包括一個路由引擎和多個包轉(zhuǎn)發(fā)引擎,用包轉(zhuǎn)發(fā)引擎I至N標(biāo)示,這些包轉(zhuǎn)發(fā)引擎通過交換矩陣互聯(lián)。交換矩陣包括一個或者多個交換平面以加速兩個或者多個包轉(zhuǎn)發(fā)引擎之間的通信,每個交換平面包括橫桿元件的三級交換。
[0116]路由引擎包括處理邏輯,用于執(zhí)行高級別的管理功能。例如,路由引擎和其它與網(wǎng)絡(luò)設(shè)備相連的網(wǎng)絡(luò)和系統(tǒng)進(jìn)行通訊,以交換網(wǎng)絡(luò)拓?fù)湫畔?。路由引擎基于網(wǎng)絡(luò)拓?fù)湫畔?chuàng)建路由表,基于路由表創(chuàng)建轉(zhuǎn)發(fā)表。包轉(zhuǎn)發(fā)引擎使用轉(zhuǎn)發(fā)表執(zhí)行路由查找。路由引擎同時也對網(wǎng)絡(luò)設(shè)備執(zhí)行其它統(tǒng)一的控制和監(jiān)控功能。
[0117]每個包轉(zhuǎn)發(fā)引擎可以連接到路由引擎和交換矩陣,交換矩陣(switch fabric)可以為背板式交換機(jī)上的硬件結(jié)構(gòu),用于在各個線路板卡之面實現(xiàn)高速的點到點連接。交換矩陣提供了能在插槽之間的各個點到點連接上同時轉(zhuǎn)發(fā)數(shù)據(jù)包的機(jī)制。包轉(zhuǎn)發(fā)引擎在連接至網(wǎng)絡(luò)的物理鏈路層接收數(shù)據(jù),例如在廣域網(wǎng)中,局域網(wǎng)或者無線網(wǎng)中。每個物理鏈路層可以是任何傳輸介質(zhì)的一種,如光纖或者以太網(wǎng)。物理鏈路層的數(shù)據(jù)可以走多種協(xié)議,如同步光網(wǎng)絡(luò)標(biāo)準(zhǔn),異步傳輸模式的技術(shù)或以太網(wǎng)協(xié)議格式化。
[0118]在圖13中所示的示例實施方案中,傳入的數(shù)據(jù)包可以被存儲在內(nèi)存中作為“共享資源”,例如當(dāng)包到達(dá)圖中所示的網(wǎng)絡(luò)設(shè)備時,如果給定的資源是數(shù)據(jù)包,資源恢復(fù)裝置可以獲得包的頭部元數(shù)據(jù),該數(shù)據(jù)包可以被路由引擎或包轉(zhuǎn)發(fā)引擎所執(zhí)行的多個線程訪問,以上多個線程通過執(zhí)行以上實施例中介紹的資源恢復(fù)方法,在出現(xiàn)線程崩潰后,及時對傳輸?shù)臄?shù)據(jù)包的資源進(jìn)行恢復(fù),避免了丟包等故障的出現(xiàn)。
[0119]使用本實施例的以上線程崩潰后的資源恢復(fù)方法,在線程崩潰后,遍歷資源信息記錄表中每條記錄,確定出崩潰進(jìn)程所使用資源的資源信息,并將已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給重新啟動的線程,從而恢復(fù)所有的資源,而不會對系統(tǒng)中的其它線程造成大量的開銷,可以很快地重啟崩潰線程及對應(yīng)的資源,減小了系統(tǒng)宕機(jī)的風(fēng)險,提高了運行可靠性。
[0120]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在權(quán)利要求書中,所要求保護(hù)的實施例的任意之一都可以以任意的組合方式來使用。
[0121]至此,本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識到,雖然本文已詳盡示出和描述了本發(fā)明的多個示例性實施例,但是,在不脫離本發(fā)明精神和范圍的情況下,仍可根據(jù)本發(fā)明公開的內(nèi)容直接確定或推導(dǎo)出符合本發(fā)明原理的許多其他變型或修改。因此,本發(fā)明的范圍應(yīng)被理解和認(rèn)定為覆蓋了所有這些其他變型或修改。
【權(quán)利要求】
1.一種線程崩潰后的資源恢復(fù)方法,其特征在于包括: 遍歷資源信息記錄表中每條記錄,其中所述資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)以及使用該項資源的線程的線程信息; 根據(jù)所述遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù); 將所述已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于 所述線程信息包括:線程標(biāo)識和生成該條記錄時的線程崩潰計數(shù); 根據(jù)所述遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù)的步驟包括: 獲取全局線程崩潰計數(shù)器的數(shù)值,所述全局線程崩潰計數(shù)器配置為記錄所有線程的崩潰總數(shù); 比較所述全局線程崩潰計數(shù)器的數(shù)值與所述生成該條記錄時的線程崩潰計數(shù); 在所述全局線程崩潰計數(shù)器的數(shù)值大于所述生成該條記錄時的線程崩潰計數(shù)的情況下,判斷該條記錄對應(yīng)的線程是否崩潰; 若是,提取該條記錄中的資源元數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,判斷該條記錄對應(yīng)的線程是否崩潰的步驟包括: 獲取該條記錄的線程標(biāo)識; 在線程崩潰表中查詢該條記錄的線程標(biāo)識對應(yīng)的線程崩潰狀態(tài),以確定所述該條記錄對應(yīng)的線程是否崩潰,其中所述線程崩潰表中存儲有每個線程的線程標(biāo)識和線程崩潰狀態(tài)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在將所述已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列之后的步驟還包括: 掃描是否存在所述已崩潰線程之外的線程崩潰; 若是,重新遍歷所述資源信息記錄表中每條記錄; 若否,判斷所述資源信息記錄表是否遍歷完成,并在遍歷完成后,將所述線程崩潰表中的所有線程崩潰狀態(tài)復(fù)位為未崩潰狀態(tài),其中所述資源信息記錄表以一個多維數(shù)組的形式存儲于內(nèi)存中,所述多維數(shù)組中包括代表線程標(biāo)識的維度、代表資源元數(shù)據(jù)的維度、代表線程崩潰計數(shù)的維度。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,在遍歷資源信息記錄表中每條記錄的步驟之前還包括: 循環(huán)監(jiān)控運行中的線程; 在所述運行中的線程中的任一個出現(xiàn)崩潰后,對所述全局線程崩潰計數(shù)器進(jìn)行累加,并確定出現(xiàn)崩潰的線程的線程標(biāo)識; 將所述出現(xiàn)崩潰的線程的線程標(biāo)識在所述線程崩潰表中對應(yīng)的線程崩潰狀態(tài)標(biāo)示為已經(jīng)崩潰; 重啟所述出現(xiàn)崩潰的線程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,循環(huán)監(jiān)控運行中的線程的步驟之前還包括: 對所述資源信息記錄表、所述全局線程崩潰計數(shù)器、以及所述線程崩潰表進(jìn)行初始 化; 接收線程的資源請求; 提取發(fā)出所述資源請求的線程的線程信息,以及所請求資源的資源元數(shù)據(jù); 將所述所請求資源的資源元數(shù)據(jù)存儲于所述資源分配隊列中,以按照所述資源分配隊列檢索資源元數(shù)據(jù)并將對應(yīng)的資源分配給線程; 從所述全局線程崩潰計數(shù)器中獲取當(dāng)前線程崩潰計數(shù); 將所述資源請求的線程的線程信息、所述所請求資源的資源元數(shù)據(jù)、當(dāng)前線程崩潰計數(shù)匹配保存為所述信息記錄表中的一條記錄。
7.—種線程崩潰后的資源恢復(fù)裝置,其特征在于包括: 資源信息遍歷模塊,配置為遍歷資源信息記錄表中每條記錄,其中所述資源信息記錄表中的一條記錄保存有一項資源的資源元數(shù)據(jù)、使用該項資源的線程的線程信息; 元數(shù)據(jù)提取模塊,配置為根據(jù)所述遍歷結(jié)果確定出已崩潰線程所使用資源的資源元數(shù)據(jù); 隊列處理模塊,配置為將所述已崩潰線程所使用資源的資源元數(shù)據(jù)插入資源分配隊列,以重新分配給線程。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于 所述線程信息包括:線程標(biāo)識和生成該條記錄時的線程崩潰計數(shù); 所述元數(shù)據(jù)提取模塊包括: 計數(shù)獲取子模塊,配置為獲取全局線程崩潰計數(shù)器的數(shù)值,所述全局線程崩潰計數(shù)器配置為記錄所有線程的崩潰總數(shù); 比較子模塊,配置為比較所述全局線程崩潰計數(shù)器的數(shù)值與所述生成該條記錄時的線程崩潰計數(shù); 判斷子模塊,配置為在所述全局線程崩潰計數(shù)器的數(shù)值大于所述生成該條記錄時的線程崩潰計數(shù)的情況下,獲取該條記錄的線程標(biāo)識,在線程崩潰表中查詢該條記錄的線程標(biāo)識對應(yīng)的線程崩潰狀態(tài),以確定所述該條記錄對應(yīng)的線程是否崩潰,其中所述線程崩潰表中存儲有每個線程的線程標(biāo)識和線程崩潰狀態(tài); 數(shù)據(jù)提取子模塊,配置為在判斷子模塊的判斷結(jié)果為是時,提取該條記錄中的資源元數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括線程判斷模塊和線程監(jiān)控模塊,其中 所述線程判斷模塊,配置為掃描是否存在所述已崩潰線程之外的線程崩潰; 所述資源信息遍歷模塊,還配置為在所述線程判斷子模塊的判斷結(jié)果為是時,重新遍歷所述資源信息記錄表中每條記錄,并在所述線程判斷子模塊的判斷結(jié)果為否時,判斷所述資源信息記錄表是否遍歷完成,確定遍歷完成后,將所述線程崩潰表中的所有線程崩潰狀態(tài)復(fù)位為未崩潰狀態(tài); 所述線程監(jiān)控模塊,配置為: 循環(huán)監(jiān)控運行中的線程;在所述運行中的線程中的任一個出現(xiàn)崩潰后,對所述全局線程崩潰計數(shù)器進(jìn)行累加,并確定出現(xiàn)崩潰的線程的線程標(biāo)識; 將所述出現(xiàn)崩潰的線程的線程標(biāo)識在所述線程崩潰表中對應(yīng)的線程崩潰狀態(tài)標(biāo)示為已經(jīng)崩潰; 重啟所述出現(xiàn)崩潰的線程。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于還包括:初始化模塊和資源分配模塊,其中 所述初始化模塊配置為:對所述資源信息記錄表、所述全局線程崩潰計數(shù)器、以及所述線程崩潰表進(jìn)行初始化, 所述資源分配模塊配置為: 接收線程的資源請求; 提取發(fā)出所述資源請求的線程的線程信息,以及所請求資源的資源元數(shù)據(jù); 將所述所請求資源的資源元數(shù)據(jù)存儲于所述資源分配隊列中,以按照所述資源分配隊列檢索資源元數(shù)據(jù)并將對應(yīng)的資源分配給線程; 從所述全局線程崩潰計數(shù)器中獲取當(dāng)前線程崩潰計數(shù); 將所述資源請求的線程的線程信息、所述所請求資源的資源元數(shù)據(jù)、當(dāng)前線程崩潰計數(shù)匹配保存為所述信息記錄表中的一條記錄。
11.一種數(shù)據(jù)處理系統(tǒng),并發(fā)運行有多個線程,其特征在于包括: 處理器,配置為執(zhí)行權(quán)利要求1至6中任一項所述的線程崩潰后的資源恢復(fù)方法;內(nèi)存,配置為保存資源信息記錄表、線程崩潰表、資源分配隊列、以及全局線程崩潰計數(shù)器。
12.根據(jù)權(quán)利要求11所述的數(shù)據(jù)處理系統(tǒng),其特征在于所述處理器還配置為: 處理從網(wǎng)絡(luò)中獲取的數(shù)據(jù)單元,并將所述數(shù)據(jù)單元的頭部信息存儲到所述內(nèi)存的所述資源信息記錄表中。
【文檔編號】G06F11/36GK104461862SQ201410572514
【公開日】2015年3月25日 申請日期:2014年10月23日 優(yōu)先權(quán)日:2014年10月23日
【發(fā)明者】田媛媛, 李俊麗, 王峻青, 尹殷, 趙峰, 喬詠, 宋瀟豫, 張永軍 申請人:中標(biāo)軟件有限公司