欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種線程池的管理方法和管理系統(tǒng)的制作方法

文檔序號:6536868閱讀:199來源:國知局
一種線程池的管理方法和管理系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種線程池的管理方法和管理系統(tǒng),管理系統(tǒng)包括工作線程創(chuàng)建單元、檢測線程創(chuàng)建單元、工作線程調(diào)用單元、心跳信號檢測單元和假死線程處理單元,管理方法包括:創(chuàng)建工作線程,將工作線程送入線程池隊列;創(chuàng)建檢測線程;調(diào)用線程池隊列中的工作線程執(zhí)行任務(wù);通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號;通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。通過線程池來管理其中的工作線程,不依賴于操作系統(tǒng)托管,能夠及時準確地檢測出假死的線程,進而找到假死線程執(zhí)行任務(wù)的程序中出錯的位置并通知用戶。
【專利說明】一種線程池的管理方法和管理系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及線程池技術(shù),更具體地說,涉及一種線程池的管理方法和管理系統(tǒng)。
【背景技術(shù)】
[0002]在基于面向?qū)ο缶幊痰膽?yīng)用中,由于創(chuàng)建一個對象要獲取內(nèi)存資源或者其它更多中資源,因此創(chuàng)建和銷毀對象要花費很多時間。以基于Java編程技術(shù)的應(yīng)用為例,JVM(Java虛擬機)將試圖跟蹤每一個對象,以便能夠在對象銷毀后進行系統(tǒng)資源回收。
[0003]另外,除了創(chuàng)建和銷毀線程的開銷之外,活動的線程也需要耗費系統(tǒng)資源。如果短時間內(nèi)產(chǎn)生大量線程,可能會導(dǎo)致系統(tǒng)由于過度消耗內(nèi)存或者切換過度而資源不足。為了防止資源不足,服務(wù)器應(yīng)用程序需要一些辦法來限制任何給定時刻處理的請求數(shù)目,并盡可能減少創(chuàng)建和銷毀線程的數(shù)量,特別是針對一些資源耗費比較大的線程的創(chuàng)建和銷毀,因此“線程池”技術(shù)就應(yīng)運而生。
[0004]線程池是一種多線程處理形式,目前.net平臺和Java平臺等都封裝了由操作系統(tǒng)托管的線程池接口,如圖1所示,在現(xiàn)有的線程池的管理技術(shù)中,多個任務(wù)被添加到任務(wù)隊列110中,操作系統(tǒng)從線程池中提取空閑線程來處理任務(wù),如果線程池中沒有空閑的線程,操作系統(tǒng)將擴大線程池容量,創(chuàng)建臨時的線程來處理任務(wù),在工作線程處理完任務(wù)后,將被重置為空閑狀態(tài),重新回到線程隊列中等待任務(wù)請求。
[0005]現(xiàn)有的線程池的管理技術(shù)存在以下缺陷:
[0006]只有當所有工作線程處理完任務(wù)退出之后才能夠退出進程的主線程,否則會產(chǎn)生內(nèi)存泄露或者直接無法退出,造成卡死現(xiàn)象;需要用戶自行控制線程的生命周期;無法及時準確地檢測出假死的線程,假死的線程需要用戶自行進行判斷;依賴于平臺對線程池的創(chuàng)建以及工作線程的分配,在不同的平臺下需要調(diào)用適應(yīng)于該平臺下的線程池接口才能實現(xiàn)線程調(diào)度。

【發(fā)明內(nèi)容】

[0007]本發(fā)明針對現(xiàn)有的線程池的管理技術(shù)中,在不同的平臺下需要調(diào)動適應(yīng)于該平臺下的線程池接口才能實現(xiàn)線程的調(diào)度的缺陷,無法及時準確地檢測出假死的線程,假死的線程需要用戶自行進行判斷的缺陷,提供一種線程池的管理方法和管理系統(tǒng),提供適應(yīng)于各種平臺的統(tǒng)一線程池接口,能夠及時準確地判斷出假死的線程,并通知用戶相應(yīng)的出錯位置。
[0008]本發(fā)明解決其技術(shù)問題采樣的技術(shù)方案是:提供一種線程池的管理方法,包括以下步驟:
[0009]S1、創(chuàng)建工作線程,將工作線程送入線程池隊列;
[0010]S2、創(chuàng)建檢測線程;
[0011]S3、調(diào)用所述線程池隊列中的工作線程執(zhí)行任務(wù);
[0012]S4、通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號;[0013]S5、通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
[0014]優(yōu)選地,步驟SI包括以下子步驟:
[0015]S11、設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),所述數(shù)據(jù)結(jié)構(gòu)參數(shù)包括最小工作線程數(shù)和已分配線程表;
[0016]S12、基于所述最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài);
[0017]S13、將工作線程送入線程池隊列。
[0018]優(yōu)選地,步驟S3包括以下子步驟:
[0019]S31、當有任務(wù)到達時,調(diào)用所述線程池隊列中的工作線程,并將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù);
[0020]S32、將活動狀態(tài)設(shè)置為激活狀態(tài)、運行狀態(tài)設(shè)置為工作狀態(tài)的工作線程記入所述已分配線程表。
[0021]優(yōu)選地,子步驟S31包括以下次級子步驟:
[0022]S311、當有任務(wù)到達時,判斷所述線程池隊列中是否存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程,若是則執(zhí)行次級子步驟S312,若否執(zhí)行次級子步驟 S313 ;
[0023]S312、將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù),執(zhí)行子步驟S32 ;
[0024]S313、創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列,執(zhí)行次級子步驟S312。
[0025]優(yōu)選地,所述數(shù)據(jù)結(jié)構(gòu)參數(shù)還包括最大工作線程數(shù),在次級子步驟S313中,判斷當前工作線程數(shù)是否大于或者等于所述最大工作線程數(shù),若否則創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列,執(zhí)行次級子步驟S312。
[0026]優(yōu)選地,步驟S5包括以下子步驟:
[0027]S51、檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程的運行狀態(tài)設(shè)置為假死狀態(tài),從所述已分配線程表中將處于假死狀態(tài)的工作線程移除,并釋放處于假死狀態(tài)的工作線程的所有資源;
[0028]S52、通過用戶接口通知用戶出錯位置。
[0029]提供一種線程池的管理系統(tǒng),包括:
[0030]工作線程創(chuàng)建單元,用于創(chuàng)建工作線程,并將工作線程送入線程池隊列;
[0031]檢測線程創(chuàng)建單元,用于創(chuàng)建檢測線程;
[0032]工作線程調(diào)用單元,用于調(diào)用所述線程池隊列中的工作線程執(zhí)行任務(wù);
[0033]心跳信號檢測單元,用于通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號;
[0034]假死線程處理單元,用于通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
[0035]優(yōu)選地,所述工作線程創(chuàng)建單元包括:
[0036]線程池參數(shù)設(shè)置模塊,用于設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),所述數(shù)據(jù)結(jié)構(gòu)參數(shù)包括最小工作線程量和已分配線程表;
[0037]工作線程創(chuàng)建模塊,用于基于所述最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài);
[0038]分配模塊,用于將工作線程送入線程池隊列。
[0039]優(yōu)選地,所述工作線程調(diào)用單元包括:
[0040]工作線程調(diào)用模塊,用于在任務(wù)到達時,調(diào)用所述線程池隊列中的工作線程,并將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù);
[0041]記錄模塊,用于將活動狀態(tài)設(shè)置為激活狀態(tài)、運行狀態(tài)設(shè)置為工作狀態(tài)的工作線程記入所述已分配線程表。
[0042]優(yōu)選地,所述工作線程調(diào)用模塊包括:
[0043]判斷子模塊,用于在任務(wù)到達時,判斷所述線程池隊列中是否存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程;
[0044]工作線程狀態(tài)設(shè)置子模塊,用于將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù);
[0045]臨時工作線程創(chuàng)建子模塊,用于在所述線程池隊列中不存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程時,創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列。
[0046]本發(fā)明的線程池的管理方法和管理系統(tǒng)具有以下有益效果:通過線程池來管理其中的工作線程,不依賴于操作系統(tǒng)托管,因此,在各種平臺下,只要調(diào)用本發(fā)明的線程池的統(tǒng)一接口,就可以實現(xiàn)線程的調(diào)用。更進一步,通過創(chuàng)建檢測線程來檢測執(zhí)行任務(wù)的工作線程是否發(fā)生假死,使能夠及時準確地檢測出假死的線程,進而找到假死線程執(zhí)行任務(wù)的程序中出錯的位置并通知用戶,使用戶能夠及時了解并進行相應(yīng)的補救或者預(yù)警。
【專利附圖】

【附圖說明】
[0047]圖1為現(xiàn)有的線程池管理的流程示意圖;
[0048]圖2為本發(fā)明的線程池管理方法第一實施例的流程圖;
[0049]圖3為本發(fā)明的線程池管理方法第二實施例的流程圖;
[0050]圖4為本發(fā)明的線程池管理系統(tǒng)第一實施例的功能圖;
[0051]圖5為本發(fā)明的線程池管理系統(tǒng)第一實施例中線程池初始化的流程圖;
[0052]圖6為本發(fā)明的線程池管理系統(tǒng)第一實施例中工作線程調(diào)度的流程圖;
[0053]圖7為本發(fā)明的線程池管理系統(tǒng)第一實施例中檢測線程檢測假死線程的流程圖;
[0054]圖8為本發(fā)明的線程池管理系統(tǒng)第二實施例的功能圖;
[0055]圖9為本發(fā)明工作線程的屬性的示意圖;
[0056]圖10為本發(fā)明的線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù)的示意圖。
【具體實施方式】
[0057]以下結(jié)合附圖和實施例對本發(fā)明做進一步的解釋說明。[0058]圖2為本發(fā)明的線程池管理方法第一實施例的流程圖,如圖2所示,在本實施例中,線程池管理方法包括以下步驟:
[0059]S1、創(chuàng)建工作線程,將工作線程送入線程池隊列;
[0060]S2、創(chuàng)建檢測線程;
[0061]S3、調(diào)用線程池隊列中的工作線程執(zhí)行任務(wù);
[0062]S4、通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號;
[0063]S5、通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
[0064]步驟S1-S2實質(zhì)為線程池的初始化過程,在該過程中,將創(chuàng)建線程池的控制量及控制鎖,設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),創(chuàng)建工作線程,并設(shè)置工作線程的屬性。一般而言,線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù)包括線程屬性、堆棧容量等(參見圖9),工作線程的屬性包括線程ID(由系統(tǒng)分配)、線程占堆棧的容量以及線程的優(yōu)先級等(參見圖10)。
[0065]在本實施例中,步驟SI包括以下子步驟:S11、設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),數(shù)據(jù)結(jié)構(gòu)參數(shù)包括最小工作線程數(shù)和已分配線程表;S12、基于最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài);S13、將工作線程送入線程池隊列。
[0066]具體的,除了線程池必須的傳統(tǒng)參數(shù)(例如,線程屬性、堆棧容量的等)外,在本實施例中,線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù)還包括最小工作線程數(shù)和已分配線程表,最小工作線程數(shù)可以根據(jù)實際情況由用戶設(shè)定,已分配線程表用于記錄分配了任務(wù)的工作線程。然后,根據(jù)用戶設(shè)定的工作線程數(shù)量的最小值來創(chuàng)建工作線程,并設(shè)置工作線程的屬性。除了工作線程必須的傳統(tǒng)屬性(例如,線程ID、堆棧容量、優(yōu)先級等)外,在本實施例中,工作線程的屬性還包括活動狀態(tài)和運行狀態(tài),活動狀態(tài)用于標識該工作線程處于非激活狀態(tài)(即掛起狀態(tài))還是激活狀態(tài),運行狀態(tài)用于標識該工作線程處于工作狀態(tài)還是非工作狀態(tài)(例如空閑狀態(tài)以及假死狀態(tài))。在線程池設(shè)置工作線程的屬性時,線程池將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)。完成了上述工作后,將工作線程送入線程池隊列中,等待任務(wù)到達。
[0067]在將工作線程送入線程池隊列中后,執(zhí)行步驟S2,在步驟S2中創(chuàng)建檢測線程。檢測線程將用于保持與激活的各工作線程的心跳信號(類似于網(wǎng)絡(luò)通信中與服務(wù)端的連接信號)。
[0068]在本實施例中,步驟S3包括以下子步驟:S31、當有任務(wù)到達時,調(diào)用線程池隊列中的工作線程,并將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù);S32、將活動狀態(tài)設(shè)置為激活狀態(tài)、運行狀態(tài)設(shè)置為工作狀態(tài)的工作線程記入已分配線程表。
[0069]具體的,當有任務(wù)到達時,首先當前判斷線程池隊列中是否存在空閑的工作線程,空閑的工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)(次級子步驟S311)。若存在空閑的工作線程,則獲取空閑的工作線程,將空閑的工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使該工作線程執(zhí)行任務(wù)(次級子S312),然后將該工作線程記入已分配線程表(子步驟S32)。若當前不存在空閑的工作線程,則創(chuàng)建臨時的工作線程,將臨時的工作線程送入線程池隊列(次級子步驟S313),然后將臨時的工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),使用臨時的工作線程執(zhí)行任務(wù)(次級子步驟S312)。
[0070]在本發(fā)明的其他實施例中,線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù)還可以包括最大工作線程數(shù),最大工作線程數(shù)可以根據(jù)實際情況由用戶設(shè)定。此時,在步驟S3中,當有任務(wù)到達時,首先當前判斷線程池隊列中是否存在空閑的工作線程,若存在空閑的工作線程,則獲取空閑的工作線程,將空閑的工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使該工作線程執(zhí)行任務(wù),然后將該工作線程記入已分配線程表。若當前不存在空閑的工作線程,首先判斷當前的工作線程數(shù)是否大于或者等于最大工作線程數(shù),若是則等待工作線程執(zhí)行完任務(wù)后進入空閑狀態(tài),若否則創(chuàng)建臨時的工作線程,并將臨時的工作線程送入線程池隊列,使用臨時的工作線程執(zhí)行任務(wù)。
[0071]在本實施例的步驟S4中,檢測線程保持與各處于激活狀態(tài)的工作線程的心跳信號,通過這種方式來檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號。其中,心跳周期等于各工作線程的最大心跳信號乘以一系數(shù),該系數(shù)由系統(tǒng)決定。
[0072]在本實施例的步驟S5包括以下子步驟:S51、檢測線程將在心跳周期內(nèi)未接收到心跳信號的工作線程的運行狀態(tài)設(shè)置為假死狀態(tài),從已分配線程表中將處于假死狀態(tài)的工作線程移除,并釋放處于假死狀態(tài)的工作線程的所有資源;S52、通過用戶接口通知用戶出錯位置。
[0073]具體的,若檢測線程在心跳周期內(nèi)為接收到處于激活狀態(tài)的某一工作線程的心跳信號時,將該工作線程的運行狀態(tài)設(shè)置為假死狀態(tài),并將處于假死狀態(tài)的工作線程從已分配線程表中移除,并釋放處于假死狀態(tài)的工作線程的所有資源,調(diào)用用戶接口通知用戶具體出錯的位置。所謂出錯的位置指的是假死工作線程執(zhí)行的任務(wù)的程序中出錯的位置,例如是函數(shù),或者是接口等等。執(zhí)行完任務(wù)的工作線程將回到空閑狀態(tài),再次放入線程池隊列中等待新的任務(wù)。但是假死的工作線程則不會回到隊列中,將由系統(tǒng)進行回收。
[0074]在現(xiàn)有的線程池的管理技術(shù)中,由于依賴于操作系統(tǒng)托管,在不同的平臺下,線程池接口是不同的,例如具不同的函數(shù)等,在一個平臺下適用的線程池接口,在另一個平臺下則不適用,需要重新設(shè)置及定義。不與不同,在本發(fā)明的線程池的管理方法的第一實施例中,通過線程池來管理其中的工作線程(包括工作線程的創(chuàng)建及其屬性的設(shè)置),不依賴于操作系統(tǒng)托管,因此,在各種平臺下,只要調(diào)用本發(fā)明的線程池的統(tǒng)一接口,就可以實現(xiàn)線程的調(diào)用。更進一步,通過創(chuàng)建檢測線程來檢測執(zhí)行任務(wù)的工作線程是否發(fā)生假死,能夠及時準確地檢測出假死的線程,進而找到假死線程執(zhí)行任務(wù)的程序中出錯的位置并通知用戶,使用戶能夠及時了解并進行相應(yīng)的補救或者預(yù)警。
[0075]圖3為本發(fā)明的線程池的管理方法第二實施例的流程圖,如圖3所示,在本實施例中,線程池的管理方法包括以下步驟:
[0076]S1、創(chuàng)建工作線程,將工作線程送入線程池隊列;
[0077]S2、創(chuàng)建檢測線程;
[0078]S3、調(diào)用線程池隊列中的工作線程執(zhí)行任務(wù);
[0079]S4、通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號;
[0080]S5、通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置;[0081]S6、當主線程退出時,釋放所有工作線程的資源。
[0082]本實施例與本發(fā)明的線程池的管理方法第一實施例的區(qū)別在于,進程的主線程無需等待所有的工作線程執(zhí)行完任務(wù)后退出后才退出,在主線程退出時,將釋放所有工作線程的資源。如此,無論主線程何時退出,都不會產(chǎn)生內(nèi)存泄露或者因無法退出而造成卡死的現(xiàn)象,靈活度高。
[0083]圖4為本發(fā)明的線程池的管理系統(tǒng)400第一實施例的功能框圖,如圖4所示,在本實施例中,線程池的管理系統(tǒng)400包括:
[0084]工作線程創(chuàng)建單元410,用于創(chuàng)建工作線程,并將工作線程送入線程池隊列;
[0085]檢測線程創(chuàng)建單元420,用于創(chuàng)建檢測線程;
[0086]工作線程調(diào)用單元430,用于調(diào)用所述線程池隊列中的工作線程執(zhí)行任務(wù);
[0087]心跳信號檢測單元440,用于通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號;
[0088]假死線程處理單元450,用于通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
[0089]在本實施例中,工作線程創(chuàng)建單元410包括:
[0090]線程池參數(shù)設(shè)置模塊411,用于設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),數(shù)據(jù)結(jié)構(gòu)參數(shù)包括最小工作線程量和已分配線程表;
[0091]工作線程創(chuàng)建模塊412,用于基于最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài);
[0092]分配模塊413,用于將工作線程送入線程池隊列。
[0093]在本實施例中,工作線程創(chuàng)建單元410和檢測線程創(chuàng)建單元420用于完成線程池的初始化,工作流程如圖5所示,線程池參數(shù)設(shè)置模塊411設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),工作線程創(chuàng)建模塊412判斷當前線程池中的線程數(shù)是否大于或者等于用戶指定的最小線程數(shù),若否則基于最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài),然后通過分配模塊413將工作線程送入線程池隊列。當前線程池中的線程數(shù)大于或者等于用戶指定的最小線程數(shù)時,通過檢測線程創(chuàng)建單元420創(chuàng)建檢測線程,從而完成了線程池的初始化。
[0094]在本實施例中,工作線程調(diào)用單元430包括:
[0095]工作線程調(diào)用模塊431,用于在任務(wù)到達時,調(diào)用所述線程池隊列中的工作線程,并將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù);
[0096]記錄模塊432,用于將活動狀態(tài)設(shè)置為激活狀態(tài)、運行狀態(tài)設(shè)置為工作狀態(tài)的工作線程記入所述已分配線程表。
[0097]其中,工作線程調(diào)用模塊431包括:
[0098]判斷子模塊4311,用于在任務(wù)到達時,判斷所述線程池隊列中是否存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程;
[0099]工作線程狀態(tài)設(shè)置子模塊4312,用于將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù),執(zhí)行子步驟S32 ;[0100]臨時工作線程創(chuàng)建子模塊4313,用于在所述線程池隊列中不存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程時,創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列。
[0101]在本實施例中,工作線程調(diào)用單元430的工作流程如圖6所示,判斷子模塊4311在任務(wù)到達時判斷線程池隊列中是否存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程,若有則通過工作線程狀態(tài)設(shè)置子模塊4312將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù)。若沒有空閑的工作線程,則通過臨時工作線程創(chuàng)建子模塊4313創(chuàng)建臨時的工作線程,并將臨時的工作線程送入線程池隊列來處理任務(wù)。
[0102]在其他實施例中,線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù)還包括最大工作線程數(shù),臨時工作線程創(chuàng)建子模塊4313在線程池隊列中不存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程時,進一步判斷當前工作線程數(shù)是否大于或者等于最大工作線程數(shù),若否則創(chuàng)建臨時的工作線程,并將臨時的工作線程送入線程池隊列,若是則不作任何處理,此時將等待空閑的工作線程出現(xiàn)。
[0103]在本實施例中,心跳信號檢測單元440和假死線程處理單元450的工作流程如圖7所示,通過心跳信號檢測單元440周期檢測各工作線程的心跳信號,若未在心跳周期內(nèi)檢測到心跳信號,則通過假死線程處理單元450將假死的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
[0104]在本發(fā)明的線程池的管理系統(tǒng)400的第一實施例中,通過線程池來管理其中的工作線程,不依賴于操作系統(tǒng)托管,因此,在各種平臺下,只要調(diào)用本發(fā)明的線程池的統(tǒng)一接口,就可以實現(xiàn)線程的調(diào)用。更進一步,通過創(chuàng)建檢測線程來檢測執(zhí)行任務(wù)的工作線程是否發(fā)生假死,能夠及時準確地檢測出假死的線程,進而找到假死線程執(zhí)行任務(wù)的程序中出錯的位置并通知用戶,使用戶能夠及時了解并進行相應(yīng)的補救或者預(yù)警。
[0105]圖8為本發(fā)明的線程池的管理系統(tǒng)400第二實施例的功能框圖,如圖8所示,本實施例與系統(tǒng)400第一實施例的區(qū)別在于,系統(tǒng)400還包括退出單兀460,退出單兀460用于在主線程退出時,釋放所有工作線程的資源。因此,進程的主線程無需等待所有的工作線程執(zhí)行完任務(wù)后退出后才退出,在主線程退出時,將釋放所有工作線程的資源。無論主線程何時退出,都不會產(chǎn)生內(nèi)存泄露或者因無法退出而造成卡死的現(xiàn)象,靈活度高。
[0106]以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的權(quán)利要求范圍之內(nèi)。
【權(quán)利要求】
1.一種線程池的管理方法,其特征在于,包括以下步驟: S1、創(chuàng)建工作線程,將工作線程送入線程池隊列; S2、創(chuàng)建檢測線程; S3、調(diào)用所述線程池隊列中的工作線程執(zhí)行任務(wù); S4、通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號; S5、通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
2.根據(jù)權(quán)利要求1所述的線程池的管理方法,其特征在于,步驟SI包括以下子步驟:S11、設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),所述數(shù)據(jù)結(jié)構(gòu)參數(shù)包括最小工作線程數(shù)和已分配線程表; S12、基于所述最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài); S13、將工作線程送入線程池隊列。
3.根據(jù)權(quán)利要求2所述的線程池的管理方法,其特征在于,步驟S3包括以下子步驟: S31、當有任務(wù)到達時,調(diào)用所述線程池隊列中的工作線程,并將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù); S32、將活動狀態(tài)設(shè)置為激活狀態(tài)、運行狀態(tài)設(shè)置為工作狀態(tài)的工作線程記入所述已分配線程表。
4.根據(jù)權(quán)利要求3所述的線程池的管理方法,其特征在于,子步驟S31包括以下次級子步驟: S311、當有任務(wù)到達時,判斷所述線程池隊列中是否存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程,若是則執(zhí)行次級子步驟S312,若否執(zhí)行次級子步驟S313 ; S312、將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù),執(zhí)行子步驟S32; S313、創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列,執(zhí)行次級子步驟 S312。
5.根據(jù)權(quán)利要求4所述的線程池的管理方法,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)參數(shù)還包括最大工作線程數(shù),在次級子步驟S313中,判斷當前工作線程數(shù)是否大于或者等于所述最大工作線程數(shù),若否則創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列,執(zhí)行次級子步驟S312。
6.根據(jù)權(quán)利要求3所述的線程池的管理方法,其特征在于,步驟S5包括以下子步驟: S51、檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程的運行狀態(tài)設(shè)置為假死狀態(tài),從所述已分配線程表中將處于假死狀態(tài)的工作線程移除,并釋放處于假死狀態(tài)的工作線程的所有資源; S52、通過用戶接口通知用戶出錯位置。
7.一種線程池的管理系統(tǒng),其特征在于,包括: 工作線程創(chuàng)建單元(410),用于創(chuàng)建工作線程,并將工作線程送入線程池隊列; 檢測線程創(chuàng)建單元(420),用于創(chuàng)建檢測線程;工作線程調(diào)用單元(430),用于調(diào)用所述線程池隊列中的工作線程執(zhí)行任務(wù); 心跳信號檢測單元(440),用于通過檢測線程檢測在心跳周期內(nèi)是否接收到各工作線程的心跳信號; 假死線程處理單元(450),用于通過檢測線程將在所述心跳周期內(nèi)未接收到心跳信號的工作線程設(shè)置為假死狀態(tài),釋放其所有資源,并通過用戶接口通知用戶出錯位置。
8.根據(jù)權(quán)利要求7所述的線程池的管理系統(tǒng),其特征在于,所述工作線程創(chuàng)建單元(410)包括: 線程池參數(shù)設(shè)置模塊(411),用于設(shè)置線程池的數(shù)據(jù)結(jié)構(gòu)參數(shù),所述數(shù)據(jù)結(jié)構(gòu)參數(shù)包括最小工作線程量和已分配線程表; 工作線程創(chuàng)建模塊(412),用于基于所述最小工作線程量創(chuàng)建工作線程,工作線程的屬性包括活動狀態(tài)和運行狀態(tài),并將工作線程的活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài); 分配模塊(413),用于將工作線程送入線程池隊列。
9.根據(jù)權(quán)利 要求8所述的線程池的管理系統(tǒng),其特征在于,所述工作線程調(diào)用單元(430)包括: 工作線程調(diào)用模塊(431),用于在任務(wù)到達時,調(diào)用所述線程池隊列中的工作線程,并將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù); 記錄模塊(432),用于將活動狀態(tài)設(shè)置為激活狀態(tài)、運行狀態(tài)設(shè)置為工作狀態(tài)的工作線程記入所述已分配線程表。
10.根據(jù)權(quán)利要求9所述的線程池的管理系統(tǒng),其特征在于,所述工作線程調(diào)用模塊(431)包括: 判斷子模塊(4311),用于在任務(wù)到達時,判斷所述線程池隊列中是否存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程; 工作線程狀態(tài)設(shè)置子模塊(4312),用于將工作線程的活動狀態(tài)設(shè)置為激活狀態(tài),運行狀態(tài)設(shè)置為工作狀態(tài),以使工作線程執(zhí)行任務(wù); 臨時工作線程創(chuàng)建子模塊(4313),用于在所述線程池隊列中不存在活動狀態(tài)設(shè)置為掛起狀態(tài)、運行狀態(tài)設(shè)置為空閑狀態(tài)的工作線程時,創(chuàng)建臨時的工作線程,并將臨時的工作線程送入所述線程池隊列。
【文檔編號】G06F9/46GK103744723SQ201410036823
【公開日】2014年4月23日 申請日期:2014年1月24日 優(yōu)先權(quán)日:2014年1月24日
【發(fā)明者】肖洪錦 申請人:深圳聯(lián)友科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
大悟县| 和政县| 中方县| 大城县| 本溪市| 榆林市| 龙川县| 葵青区| 会东县| 本溪市| 穆棱市| 永丰县| 奉贤区| 铜鼓县| 商都县| 平陆县| 安徽省| 靖宇县| 云阳县| 南皮县| 色达县| 七台河市| 莒南县| 涞水县| 鄂托克前旗| 鞍山市| 定日县| 斗六市| 富民县| 静乐县| 新巴尔虎左旗| 大宁县| 射阳县| 施甸县| 资阳市| 锡林浩特市| 定安县| 保定市| 澄迈县| 西峡县| 鄢陵县|