鬼佬大哥大
  • / 11
  • 下載費用:30 金幣  

一種基于線程池的任務分配方法.pdf

關 鍵 詞:
一種 基于 線程 任務 分配 方法
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
摘要
申請專利號:

CN201510274987.0

申請日:

2015.05.26

公開號:

CN104899099A

公開日:

2015.09.09

當前法律狀態:

實審

有效性:

審中

法律詳情: 實質審查的生效IPC(主分類):G06F 9/50申請日:20150526|||公開
IPC分類號: G06F9/50 主分類號: G06F9/50
申請人: 北京金和網絡股份有限公司
發明人: 李軍鋒
地址: 100085北京市海淀區上地東路1號院盈創動力大廈A座401
優先權:
專利代理機構: 北京遠大卓悅知識產權代理事務所(普通合伙)11369 代理人: 史霞
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201510274987.0

授權公告號:

|||

法律狀態公告日:

2015.10.07|||2015.09.09

法律狀態類型:

實質審查的生效|||公開

摘要

本發明提供一種基于線程池的任務分配方法,其包括:步驟一,創建線程池和任務池;步驟二,預先確定一數量值n,初始化n個線程并將所述線程順序存儲至所述線程池列隊中;步驟三,接收任務后遍歷所述線程池,若所述線程池中有空閑線程時,則從所述線程池中順序調取所述空閑線程并執行所述任務;若所述線程池中無空閑線程時,則將所述任務順次存儲至所述任務池的列隊中。本發明提供一種能夠充分利用現有硬件資源,實現軟件多任務并行執行,且對每個任務執行者可重復使用的多線程任務分配方法,解決軟件運行的性能、易用性等問題,并且避免了線程的創建調用和切換所帶來的資源浪費問題。

權利要求書

權利要求書
1.  一種基于線程池的任務分配方法,其特征在于,包括:
步驟一,創建線程池和任務池;
步驟二,預先確定一數量值n,初始化n個線程并將所述線程順序存儲至所述線程池列隊中;
步驟三,接收任務后遍歷所述線程池,若所述線程池中有空閑線程時,則從所述線程池中順序調取所述空閑線程并執行所述任務;若所述線程池中無空閑線程時,則將所述任務順次存儲至所述任務池的列隊中。

2.  如權利要求1所述的基于線程池的任務分配方法,其特征在于,根據處理器芯片的核數i確定所述數值n;
所述數量值n的計算公式為:n=i*2+2;
其中,i表示處理器(CPU)芯片的核數;n表示初始化線程的個數。

3.  如權利要求2所述的基于線程池的任務分配方法,其特征在于,步驟三中接收任務后,還包括順序鎖定所述線程池和所述任務池。

4.  如權利要求3所述的基于線程池的任務分配方法,其特征在于,所述順序鎖定所述線程池和所述任務池具體指:
鎖定所述線程池;
鎖定所述任務池;
存在空閑線程時,當所述任務分配至所述空閑線程,將所述線程池和所述任務池解鎖;不存在空閑線程時,則將所述線程池和所述任務池解鎖。

5.  如權利要求4所述的基于線程池的任務分配方法,其特征在于,所述線程執行完任務后,還包括:
遍歷所述任務池;
若所述任務池隊列中有任務時,則從所述任務池隊列中順序調取所述任務并將該任務分配至所述線程;所述線程執行該任務;
若所述任務池中沒有任務時,則所述線程返回至所述線程池隊列中。

6.  如權利要求5所述的基于線程池的任務分配方法,其特征在于,所述任務池每次只能容納一個所述線程。

7.  如權利要求6所述的基于線程池的任務分配方法,其特征在于,所述線程進入所述任務池時,包括:
鎖定所述線程池;
鎖定所述任務池;
所述任務池中存在任務時,當所述任務分配至所述線程后,解鎖所述線程池和所述任務池;
所述任務池中不存在任務時,解鎖所述線程池和所述任務池。

8.  如權利要求7所述的基于線程池的任務分配方法,其特征在于,當所述線程池中只有一個線程時;
接收任務后,直接從所述線程池中調取所述線程執行該任務。

說明書

說明書一種基于線程池的任務分配方法
技術領域
本發明屬于多線程和隊列領域,特別涉及一種基于線程池的任務分配方法。
背景技術
隨著信息技術和軟件行業的不斷發展,與之同時所承載的硬件資源也在飛速發展,但人們對軟件或應用的使用也在不斷提出更高的要求,比如:性能、易用性等等,只有滿足了人們的使用需求,產品才能更具市場競爭力,企業才能走的更遠。
目前,對于線程任務的分配,一般是采用隨意或不限制地創建線程的方式。但是,由于每臺計算機或終端的中央處理器(CPU)核心芯片是固定的,處理任務的線程數據也是固定,過多或太少都不能發揮它的最大性能,這種方式必然會造成計算機或終端任務不飽和或負載過重,以影響軟件運行效率。因此,只有根據硬件的情況創建線程才能發揮中央處理器的最大效能。
發明內容
本發明的一個目的是解決至少上述問題或缺陷,并提供至少后面將說明的優點。
本發明另一個目的是提供一種基于線程池的任務分配方法,以充分利用硬件資源實現多任務并行執行,且對每個線程可重復使用的多線程任務分配方法,避免線程的創建調用,以及創建調用線程所產生的資源浪費問題。
本發明還有一個目的是根據計算機或終端當前CPU配置情況,自動創建合適的線程數量,且線程的數量既能滿足多任務并行執行的需求,也不會占用過多的處理器的空間,充分提高線程的使用效率。
為了實現根據本發明的這些目的和其它優點,提供了一種基于線程池的 任務分配方法,包括:
步驟一,創建線程池和任務池;
步驟二,預先確定一數量值n,初始化n個線程并將所述線程順序存儲至所述線程池列隊中;
步驟三,接收任務后遍歷所述線程池,若所述線程池中有空閑線程時,則從所述線程池中順序調取所述空閑線程并執行所述任務;若所述線程池中無空閑線程時,則將所述任務順次存儲至所述任務池的列隊中。
預先初始化n個線程存儲至線程池,當接收到任務后即從線程池中調取空閑線程,充分利用現有硬件資源實現多任務并行執行,且對每個任務執行者可重復使用,以解決軟件運行的性能、易用性等問題,并且避免了線程的創建調用和切換所帶來的資源浪費問題。
同時,當接收任務后先查找空閑線程,如果有空閑線程,則直接去執行任務,如果沒有空閑線程,再把任務放進任務池,等待空閑線程來執行。當存在空閑線程時,可以將任務直接快速地分配至空閑線程,提高任務處理的速度和效率。
優選的是,所述的基于線程池的任務分配方法中,根據處理器芯片的核數i確定所述數值n;
所述數量值n的計算公式為:n=i*2+2;
其中,i表示處理器(CPU)芯片的核數;n表示初始化線程的個數。
根據計算機或終端當前CPU配置情況,自動創建合適數量的線程,將這些線程存放至線程池中,并且不對線程池中空閑線程進行刪除。這些數量的線程既可以滿足多任務并行執行的要求,又不占用處理器的空間和資源,還可以避免再次創建線程所帶來的資源消耗。
優選的是,所述的基于線程池的任務分配方法中,步驟三中接收任務后,還包括順序鎖定所述線程池和所述任務池。線程運行屬于異步運行,在高并發的情況下,兩個或多個線程同時去執行同一個任務是存在的。為了避免這種情況的發生,當接收任務后,對線程池和任務池執行順序鎖定的操作。
優選的是,所述的基于線程池的任務分配方法中,所述順序鎖定所述線程池和所述任務池具體指:
鎖定所述線程池;
鎖定所述任務池;
存在空閑線程時,當所述任務分配至所述空閑線程,將所述線程池和所述任務池解鎖;不存在空閑線程時,則將所述線程池和所述任務池解鎖。
為了避免死鎖現象的出現,先鎖定線程池,再鎖定任務池。并且當任務分配至空閑線程后,線程通過接口去執行該任務,或者當線程池中沒有空閑線程時,將任務池和線程池解鎖,這樣既可以避免兩個或多個線程同時去執行同一個任務的情況,有可以避免死鎖現象的發生。
優選的是,所述的基于線程池的任務分配方法中,所述線程執行完任務后,還包括:
遍歷所述任務池;
若所述任務池隊列中有任務時,則從所述任務池隊列中順序調取所述任務并將該任務分配至所述線程;所述線程執行該任務;
若所述任務池中沒有任務時,則所述線程返回至所述線程池隊列中。當線程執行完任務后,首先查找任務池中是否有未完成的任務,當有任務時,則該線程直接去執行任務。實現線程的反復多次利用,提高線程的利用率。
優選的是,所述的基于線程池的任務分配方法中,所述任務池每次只能容納一個所述線程。每次任務池只能有一個線程領取任務,以避免兩個或多個線程領取同一個任務的現象。
優選的是,所述的基于線程池的任務分配方法中,所述線程進入所述任務池時,包括:
鎖定所述線程池;
鎖定所述任務池;
所述任務池中存在任務時,當所述任務分配至所述線程后,解鎖所述線程池和所述任務池;
所述任務池中不存在任務時,解鎖所述線程池和所述任務池。通過先鎖定線程池,再鎖定任務池,以避免兩個或多個線程同時領取同一個任務的情況的發送。當任務分配完畢或任務池中沒有未執行的任務時,才對任務池和線程池進行解鎖。
優選的是,所述的基于線程池的任務分配方法中,當所述線程池中只有一個線程時;
接收任務后,直接從所述線程池中調取所述線程執行該任務。將任務直接分配至線程池中唯一的1個線程,提高任務執行的效率。
本發明的有益效果如下:
1、所述的基于線程池的任務分配方法中,充分利用線程資源,初始化預定數量的線程用來實現多任務并行執行,并且每個線程可重復使用,避免線程的創建和調用,以及創建調用線程所產生的資源浪費的問題。
2、所述的基于線程池的任務分配方法中,根據中央處理器(CPU)的核數自動生成合適數量的線程,這些線程既能滿足多任務并行執行的數量需求,又不會占用過多的處理器的空間,充分提高線程的使用效率。
3、所述的基于線程池的任務分配方法中,接收任務后,任務直接在線程池調取空閑線程,若線程池中沒有空閑線程時,該任務才存儲至任務池的列隊中等待,這樣快速、直接地進行任務分配,提高任務執行的效率。
4、所述的基于線程池的任務分配方法中,在任務調取線程池中的空閑線程或線程完成任務后,在任務池中領取任務,都順序鎖定線程池和任務池,以避免出現死鎖現象。
附圖說明
圖1為本發明所述的基于線程池的任務分配方法的流程圖;
圖2為本發明其中一個實施例中所述的基于線程池的任務分配方法的創建任務池和線程池的過程圖;
圖3為本發明其中一個實施例中所述的基于線程池的任務分配方法的線程池初始化的過程圖
圖4為本發明其中一個實施例中所述的基于線程池的任務分配方法的任務分配的過程圖;
圖5為本發明其中一個實施例中所述的基于線程池的任務分配方法的線程執行完任務后領取任務的過程圖。
具體實施方式
下面結合附圖對本發明做進一步的詳細說明,以令本領域技術人員參照說明書文字能夠據以實施。
本發明公開了一種基于線程池的任務分配方法,如圖1所示,該方法至少包括:
步驟一,創建線程池和任務池;這兩個池在軟件關閉前下不會自動釋放,以避免線程創建和切換帶來的資源浪費,線程池中的線程全部處在等待狀態。創建線程池和任務池的具體實例如圖2所示。
步驟二,根據處理器芯片的核數i確定所述數值n;初始化n個線程并將所述線程順序存儲至所述線程池列隊中;
所述數量值n的計算公式為:n=i*2+2;   (1)
其中,i表示處理器(CPU)芯片的核數;n表示初始化線程的個數。
初始化n個線程的具體實例如圖3所示。
步驟三,接收任務后,順序鎖定所述線程池和所述任務池,先鎖定所述線程池;在鎖定所述任務池;遍歷所述線程池,若所述線程池中有空閑線程時,則從所述線程池中順序調取所述空閑線程并執行所述任務,并對所述線程池和所述任務池進行解鎖;若所述線程池中無空閑線程時,則將所述任務順次存儲至所述任務池的列隊中,并將所述線程池和所述任務池解鎖。具體實例如圖4所示。
所述基于線程池的任務分配方法中,還包括,當所述線程執行完任務后,還包括:
所述線程進入所述任務池時,同時,先鎖定所述線程池;再鎖定所述任務池;
遍歷所述任務池;
若所述任務池隊列中有任務時,則從所述任務池隊列中順序調取所述任務并將該任務分配至所述線程,并對所述線程池和所述任務池執行解鎖的操作;若所述任務池中沒有任務時,對所述線程池和所述任務池執行解鎖的操作,并將所述線程返回至所述線程池隊列中。線程執行完任務后,其具體實 例如圖5所示。
此外,如以實例Poolpool=newPool()為例,其具體過程如下:

所述的基于線程池的任務分配方法中,所述任務池每次只能容納一個所述線程。
所述的基于線程池的任務分配方法中,當所述線程池中只有一個線程時;
接收任務后,直接從所述線程池中調取所述線程執行該任務。
盡管本發明的實施例已公開如上,但其并不僅僅限于說明書和實施方式中所列運用,它完全可以被適用于各種適合本發明的領域,對于熟悉本領域的人員而言,可容易地實現另外的修改,因此在不背離權利要求及等同范圍所限定的一般概念下,本發明并不限于特定的細節。

關于本文
本文標題:一種基于線程池的任務分配方法.pdf
鏈接地址:http://www.wwszu.club/p-6369462.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
鬼佬大哥大