一種任務調度方法及裝置的制造方法
【專利摘要】本發(fā)明實施例公開了一種任務調度方法及裝置,涉及計算機技術領域,不僅可以避免多個線程并行執(zhí)行任務時,同時訪問一個數(shù)據(jù)塊而引發(fā)的數(shù)據(jù)競爭,還可以避免引入鎖帶來的額外性能開銷,減少并發(fā)錯誤的檢測和調試難度。具體方案為:根據(jù)待執(zhí)行的多個任務與多個任務待訪問的M個數(shù)據(jù)塊的對應關系,將多個任務中的每個任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列;采用N個線程并行執(zhí)行M個任務隊列中N個任務隊列中的任務,該N個線程中的每個線程執(zhí)行N個任務隊列中一個任務隊列中的任務,N個線程中不同的線程執(zhí)行不同任務隊列中的任務,2≤N≤M。本發(fā)明用于多核系統(tǒng)的任務調度過程中。
【專利說明】
_種任務調度方法及裝置
技術領域
[0001 ]本發(fā)明涉及計算機技術領域,尤其涉及一種任務調度方法及裝置。
【背景技術】
[0002] 隨著處理器技術的發(fā)展,多核處理器的使用越來越廣泛,市場上大多數(shù)處理器采 用多核多線程的體系結構,甚至很多終端配置的處理器已經可以達到4核乃至8核。
[0003] 流式應用是一種常見的應用類型,在采用上述多核處理器處理流式應用的應用數(shù) 據(jù)時,為了充分利用該多核處理器的并行處理能力,可以將流式應用的應用數(shù)據(jù)劃分為多 個數(shù)據(jù)塊,由多核處理器并行處理上述多個數(shù)據(jù)塊。其中,多核處理器的并行處理過程中, 可能會存在由于采用至少兩個線程并行執(zhí)行任務時,該至少兩個線程同時訪問一個數(shù)據(jù) 塊,而引發(fā)數(shù)據(jù)競爭。
[0004] 現(xiàn)有技術中,為了避免上述數(shù)據(jù)競爭,在多核處理器的并行處理過程引入了"鎖"。 其中,線程在訪問一個數(shù)據(jù)塊之前,需要先獲得該數(shù)據(jù)塊的鎖,并在訪問完成后,需要釋放 該數(shù)據(jù)塊的鎖。如此在一個線程訪問該數(shù)據(jù)塊的過程中,其他線程則不能同時訪問該數(shù)據(jù) 塊,則可以避免采用多個線程并行執(zhí)行任務時,多個線程同時訪問一個數(shù)據(jù)塊而引發(fā)的數(shù) 據(jù)克爭。
[0005] 但是,存在的問題是:在多核處理器的并行處理過程引入了"鎖"后,雖然可以避免 多個線程并行執(zhí)行任務時,同時訪問一個數(shù)據(jù)塊,但是在多線程并行執(zhí)行任務的過程中,仍 舊存在多個線程同時競爭一個數(shù)據(jù)塊的鎖的問題,鎖的競爭會帶來額外的性能開銷。
【發(fā)明內容】
[0006] 本發(fā)明的實施例提供一種任務調度方法及裝置,不僅可以減少多個線程并行執(zhí)行 任務時,同時訪問一個數(shù)據(jù)塊而引發(fā)的數(shù)據(jù)競爭,從而可以提高任務調度的效率。
[0007] 為達到上述目的,本發(fā)明的實施例采用如下技術方案:
[0008] 本發(fā)明實施例的第一方面,提供一種任務調度方法,該任務調度方法包括:根據(jù)待 執(zhí)行的多個任務與該多個任務待訪問的M個數(shù)據(jù)塊的對應關系,將上述多個任務中的每個 任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列,其中,該M個數(shù)據(jù)塊與M個任務隊列一一對 應;采用N個線程并行執(zhí)行該M個任務隊列中N個任務隊列中的任務,其中,該N個線程中的每 個線程執(zhí)行該N個任務隊列中一個任務隊列中的任務,該N個線程中不同的線程執(zhí)行不同任 務隊列中的任務,2<N<M。
[0009] 本發(fā)明實施例提供的任務調度方法,可以以數(shù)據(jù)塊為中心,多個任務中的每個任 務分別添加到與該任務對應的數(shù)據(jù)塊的任務隊列;然后采用N個線程中的每個線程分別執(zhí) 行一個任務隊列中的任務。如此,即使多個線程并行運行,由于采用該多個線程中每一個線 程針對不同的數(shù)據(jù)塊,執(zhí)行不同數(shù)據(jù)塊的任務隊列中的任務;因此,不會存在多個線程同時 競爭一個數(shù)據(jù)塊或者競爭一個數(shù)據(jù)塊的鎖的問題。
[0010] 通過本方案,可以減少采用多個線程并行執(zhí)行任務時,多個線程同時訪問一個數(shù) 據(jù)塊而引發(fā)的數(shù)據(jù)競爭,從而可以提高任務調度的效率。并且,由于本方案中無需引入鎖機 制,因此可以避免引入鎖帶來的額外性能開銷,降低并發(fā)錯誤的檢測和調試難度。
[0011]可以想到的是,由于系統(tǒng)性能或者系統(tǒng)配置的制約,系統(tǒng)中創(chuàng)建的線程的數(shù)量有 限;當沒有空閑的線程來執(zhí)行剛剛生成的數(shù)據(jù)塊的任務隊列中的任務時,該數(shù)據(jù)塊的任務 隊列則需要等待線程執(zhí)行完其他數(shù)據(jù)塊的任務隊列中的任務后,再執(zhí)行該數(shù)據(jù)塊對應的任 務隊列中的任務。例如,當系統(tǒng)中創(chuàng)建了 N個線程,而當前存在M(2<N<M)個數(shù)據(jù)塊的任務 隊列中的任務需要被執(zhí)行時,該N個線程則只能夠并行執(zhí)行M個任務隊列中N個任務隊列中 的任務。
[0012]據(jù)此,本發(fā)明實施例的方法還可以包括:將M個任務隊列中的至少一個任務隊列添 加至等待隊列組,該至少一個任務隊列中的每個任務隊列中包含至少一個任務,且該至少 一個任務未被N個線程中的線程執(zhí)行。其中,該等待隊列組用于按照先進先出的原則存放上 述M個任務隊列中的任務隊列。
[0013] 通過本方案,可以將M個任務隊列中的至少一個任務隊列添加至等待隊列組,如 此,上述N個線程中的任一線程便可以在空閑后依據(jù)等待隊列組中存放任務隊列的原則,執(zhí) 行等待隊列組中存放任務隊列中的任務。
[0014] 可選的,本發(fā)明實施例中,采用N個線程并行執(zhí)行M個任務隊列中N個任務隊列中的 任務的方法具體可以包括:采用該N個線程,并行執(zhí)行上述等待隊列組中的前N個任務隊列 中的任務。
[0015] 其中,該前N個任務隊列為該等待隊列組中最先添加的N個任務隊列,該N個線程中 的每個線程按照先進先出原則執(zhí)行該前N個任務隊列中一相應的任務隊列中的任務。
[0016] 進一步的,系統(tǒng)中的任一線程可能會因為執(zhí)行完一個數(shù)據(jù)塊的任務隊列中的所有 任務而處于空閑狀態(tài),或者該線程可能會因為退出執(zhí)行一個數(shù)據(jù)塊的任務隊列中的任務而 處于空閑狀態(tài),即該線程為空閑線程。此時,該空閑線程則可以執(zhí)行在上述前N個任務隊列 后被添加到上述等待隊列組的首個任務隊列中的任務。
[0017] 具體的,本發(fā)明實施例的方法還可以包括:采用一空閑線程執(zhí)行等待隊列組中第 一隊列中的任務,第一隊列為在上述前N個任務隊列后被添加到該等待隊列組的首個任務 隊列。
[0018] 并且,為了實時更新該等待隊列組中的任務隊列,本發(fā)明實施例的方法還可以包 括:將被執(zhí)行的第一隊列從該等待隊列組中刪除。
[0019] 示例性的,在本發(fā)明實施例中,上述N個線程中的任一線程執(zhí)行一任務隊列中的任 務的方法可以包括:該線程逐個執(zhí)行該任務隊列中的每個任務。
[0020] 具體的,任務調度裝置采用一個線程(第一線程)執(zhí)行一個任務隊列(第二隊列)中 的任務的方法,包括:采用第一線程讀取第二隊列中的第k個任務,并切換到第二隊列中的 第k個任務的上下文開始執(zhí)行,l<k<K,K為第二隊列中的任務總數(shù);若采用第一線程執(zhí)行 完第二隊列中的第k個任務,則將第一線程退出第二隊列中的第k個任務,并采用第一線程 讀取第一隊列中的第k+1個任務,并切換到第二隊列中的第k+1個任務的上下文開始執(zhí)行, 直至第二隊列中的K個任務執(zhí)行完畢。
[0021] 可以想到的是,上述線程可能會因為第二隊列中的第k個任務等待來自其他任務 隊列(第三隊列)的任務執(zhí)行結果,而退出執(zhí)行第k個任務。此時,則可以將退出執(zhí)行的第k個 任務添加至第三隊列,并在該第k個任務獲得該任務執(zhí)行結果后,采用其他線程(第二線程) 執(zhí)行第三隊列中的該第k個任務。
[0022]具體的,上述多個任務包括屬于第二隊列的第一任務,該第一任務在被第一線程 執(zhí)行的過程中等待來自第三隊列的任務執(zhí)行結果,該第一線程為上述N個線程中用于執(zhí)行 該第二隊列中的任務的線程,該第二隊列為上述等待隊列組中的任一任務隊列,該第三隊 列為等待隊列組中不同于該第二隊列的任務隊列。
[0023]本發(fā)明實施例的方法還可以包括:將第一線程退出執(zhí)行正在等待上述任務執(zhí)行結 果的第一任務;將退出執(zhí)行的第一任務添加至上述第三隊列;待該第一任務獲得任務執(zhí)行 結果后,采用第二線程執(zhí)行第二隊列中的第一任務。
[0024]其中,上述第二線程可以為N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或 者,上述第二線程為N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。上述第一任務即 為第二隊列中的第k個任務。
[0025]通過上述方案,即使一線程因為該線程正在執(zhí)行的任務隊列中的一任務等待其他 任務隊列的任務執(zhí)行結果,而退出執(zhí)行該任務,也可以將該任務添加至上述其他任務隊列 中。如此,便可以在該任務獲得上述其他任務隊列的任務執(zhí)行結果后,采用一個空閑線程執(zhí) 行該任務隊列中的該任務。
[0026]優(yōu)選的,當一線程開始執(zhí)行等待隊列組中的一個任務隊列后,則表示該任務隊列 當前不處于等待執(zhí)行狀態(tài)。為了及時更新等待隊列組中的任務隊列,使得該等待隊列組中 僅包括未被線程執(zhí)行的任務所在的任務隊列,本發(fā)明實施例的方法還可以包括:將等待隊 列組中被N個線程中的線程執(zhí)行的任務所在的任務隊列刪除。
[0027]通過上述方案,及時刪除了等待隊列組中已經被執(zhí)行的任務所在的任務隊列,這 樣等待隊列組中則不會包括已被線程執(zhí)行的任務所在的任務隊列。
[0028] 進一步的,由于在本發(fā)明實施例中,一個線程在一定的時間段內,會逐個執(zhí)行一個 數(shù)據(jù)塊的任務隊列中的任務,即一個線程在一定的時間段內針對同一數(shù)據(jù)塊,執(zhí)行該數(shù)據(jù) 塊對應的任務;那么該線程在一定時間段內進行多次任務切換前后處理的數(shù)據(jù)是相同的。 如此,可以避免了傳統(tǒng)任務并行系統(tǒng)中因任務切換前后處理不同的數(shù)據(jù)而導致的大量緩存 (cache)彳丁換出換入的問題,從而可以提尚訪存效率,提尚程序的性能。
[0029] 本發(fā)明實施例的第二方面,提供一種任務調度裝置,包括:任務添加模塊和任務執(zhí) 行模塊。
[0030] 任務添加模塊,用于根據(jù)待執(zhí)行的多個任務與該多個任務待訪問的M個數(shù)據(jù)塊的 對應關系,將該多個任務中的每個任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列,其中,該 M個數(shù)據(jù)塊與M個任務隊列--對應。
[0031] 任務執(zhí)行模塊,用于采用N個線程并行執(zhí)行上述任務添加模塊添加至上述M個任務 隊列中N個任務隊列中的任務,其中,該N個線程中的每個線程執(zhí)行該N個任務隊列中一個任 務隊列中的任務,該N個線程中不同的線程執(zhí)行不同任務隊列中的任務,2SNSM。
[0032]需要說明的是,本發(fā)明實施例提供的任務調度裝置包括但不限于上述第二方面中 的任務添加模塊和任務執(zhí)行模塊,并且第二方面中的任務添加模塊和任務執(zhí)行模塊的功能 包括但不限于上述描述中的功能。該任務調度裝置包括用于執(zhí)行上述第一方面以及第一方 面的各種可選方式所述的任務調度方法的模塊,這些模塊是為了執(zhí)行上述第一方面以及第 一方面的各種可選方式所述的任務調度方法,而對任務調度裝置進行的邏輯上的劃分。
[0033]本發(fā)明實施例的第三方面,提供一種任務調度裝置,該任務調度裝置包括:一個或 多個處理器、存儲器、總線和通信接口。
[0034] 上述存儲器用于存儲計算機執(zhí)行指令,上述處理器與該存儲器通過上述總線連 接,當任務調度裝置運行時,該處理器執(zhí)行該存儲器存儲的計算機執(zhí)行指令,以使任務調度 裝置執(zhí)行上述第一方面以及第一方面的各種可選方式所述的任務調度方法。
[0035] 本發(fā)明實施例的第四方面,提供一種計算機可讀存儲介質,該計算機可讀存儲介 質中存儲有一個或多個程序代碼,該程序代碼包括計算機執(zhí)行指令,當任務調度裝置的處 理器執(zhí)行上述計算機執(zhí)行指令時,該任務調度裝置執(zhí)行上述第一方面以及第一方面的各種 可選方式所述的任務調度方法。
[0036] 需要說明的是,上述任務調度裝置及該任務調度裝置執(zhí)行計算機可讀存儲介質中 存儲的程序的具體技術效果及其相關分析過程可以參考本發(fā)明實施例第一方面或第一方 面的任一種實現(xiàn)方式中的相關技術效果描述,此處不再贅述。
【附圖說明】
[0037] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn) 有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。
[0038]圖1為本發(fā)明實施例提供的一種DB0S場景示意圖;
[0039] 圖2為本發(fā)明實施例提供的一種任務調度方法的流程圖;
[0040] 圖3為本發(fā)明實施例提供的一種數(shù)據(jù)塊的任務隊列實例示意圖;
[0041] 圖4為本發(fā)明實施例提供的另一種數(shù)據(jù)塊的任務隊列實例示意圖;
[0042] 圖5為本發(fā)明實施例提供的一種線程調度數(shù)據(jù)塊的任務隊列的實例示意圖;
[0043] 圖6為本發(fā)明實施例提供的另一種任務調度方法的流程圖;
[0044] 圖7為本發(fā)明實施例提供的另一種線程調度數(shù)據(jù)塊的任務隊列的實例示意圖;
[0045] 圖8為本發(fā)明實施例提供的另一種任務調度方法的流程圖;
[0046] 圖9為本發(fā)明實施例提供的另一種任務調度方法的流程圖;
[0047] 圖10為本發(fā)明實施例提供的一種任務調度裝置的結構組成示意圖;
[0048] 圖11為本發(fā)明實施例提供的另一種任務調度裝置的結構組成示意圖;
[0049] 圖12為本發(fā)明實施例提供的另一種任務調度裝置的結構組成示意圖;
[0050] 圖13為本發(fā)明實施例提供的另一種任務調度裝置的結構組成示意圖。
【具體實施方式】
[0051] 本發(fā)明的說明書以及附圖中的術語"第一"和"第二"等是用于區(qū)別不同的對象,而 不是用于描述對象的特定順序。例如,第一隊列和第二隊列等是用于區(qū)別不同的任務隊列, 而不是用于描述任務隊列的特征順序。
[0052]在本發(fā)明的描述中,除非另有說明,"多個"的含義是指兩個或兩個以上。例如,多 個處理器或多核處理器是指兩個或兩個以上處理器。
[0053]此外,本發(fā)明的描述中所提到的術語"包括"和"具有"以及它們的任何變形,意圖 在于覆蓋不排他的包含。例如包含了一系列步驟或單元的過程、方法、系統(tǒng)、產品或設備沒 有限定于已列出的步驟或單元,而是可選地還包括其他沒有列出的步驟或單元,或可選地 還包括對于這些過程、方法、產品或設備固有的其它步驟或單元。
[0054]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行詳細地描 述,顯然,所描述的實施例僅僅是本發(fā)明的一部分實施例,而不是全部實施例。
[0055] 本發(fā)明實施例的技術方案應用于媒體數(shù)據(jù)處理領域、電信數(shù)據(jù)處理領域以及大數(shù) 據(jù)分析處理領域中的"流式應用"的處理過程,可以利用多核處理器的并行處理能力提高其 處理效率的場景中。其中,媒體數(shù)據(jù)處理包括圖像處理、音頻處理、視頻處理等。
[0056] 具體可以應用于面向數(shù)據(jù)塊的調度(Data Block Oriented Schedule,DB0S)的場 景中。如圖1所示,為本發(fā)明實施例中的一種DBOS場景示意圖。該DBOS場景的軟硬件框架10 包括:數(shù)據(jù)塊空間定義接口、任務相關接口、應用層和運行在多核處理器上的操作系統(tǒng) (Operating System,0S)〇
[0057]以下以處理流式應用的處理過程為例,對圖1所示的DBOS場景進行舉例說明:
[0058]任務相關接口用于接收應用層的流式應用針對M個數(shù)據(jù)塊的業(yè)務處理請求,由操 作系統(tǒng)12根據(jù)每個數(shù)據(jù)塊對應的處理請求,為該數(shù)據(jù)塊創(chuàng)建至少一個任務,并將創(chuàng)建的任 務分別添加至該任務指定的數(shù)據(jù)塊的任務隊列。
[0059] 數(shù)據(jù)塊空間定義接口用于接收用戶編寫的用于為M個數(shù)據(jù)塊分配內存空間的程序 代碼,由操作系統(tǒng)12用于該M個數(shù)據(jù)塊分配內存空間。該內存空間用于保存M個數(shù)據(jù)塊中每 個數(shù)據(jù)塊的任務隊列。其中,數(shù)據(jù)塊空間定義接口和任務相關接口可以為上述操作系統(tǒng)提 供的。
[0060] 多核處理器可以通過操作系統(tǒng)中配置的N個線程調用運行時庫(Runtime Library),以數(shù)據(jù)塊為中心,并行執(zhí)行M個數(shù)據(jù)塊中N個數(shù)據(jù)塊的任務隊列中的任務。其中,N 線程執(zhí)行N個任務隊列中一個任務隊列中的任務,該N個線程中不同的線程執(zhí)行不同任務隊 列中的任務。
[0061] 可以想到的是,上述M個數(shù)據(jù)塊可以為存儲在硬盤中的數(shù)據(jù),也可以為存儲在內存 空間中的數(shù)據(jù);當然,該M個數(shù)據(jù)塊也可以為攜帶在上述流式應用的業(yè)務處理請求中待處理 的數(shù)據(jù),本發(fā)明實施例對此不做限制。
[0062] 需要說明的是,本發(fā)明實施例這里僅以圖1所示的DB0S場景為例,對本發(fā)明實施例 所應用的DB0S場景進行舉例說明。本發(fā)明實施例具體所應用的DB0S場景并不限于圖1所示 的DB0S場景,因此,圖1所示的DB0S場景并不會對本發(fā)明實施例的技術方案的應用場景造成 限定。
[0063] 本發(fā)明實施例提供的任務調度方法的執(zhí)行主體可以為安裝有多核處理器的計算 機設備(簡稱多核設備);或者,任務調度方法的執(zhí)行主體可以為上述多核設備中用于執(zhí)行 任務調度方法的裝置,如任務調度裝置。該任務調度裝置可以為上述多核設備的中央處理 器(Central Processing Unit,CPU)〇
[0064] 與現(xiàn)有技術中以任務為中心,各個線程并行執(zhí)行不同的任務時訪問數(shù)據(jù)塊,可能 存在多個線程同時競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題相比;本發(fā)明實施例中可以 以數(shù)據(jù)塊為中心,將多個任務中的每個任務分別添加到與該任務對應的數(shù)據(jù)塊的任務隊 列;然后采用N個線程中的每個線程分別執(zhí)行一個任務隊列中的任務。如此,即使多個線程 并行運行,由于采用該多個線程中每一個線程針對不同的數(shù)據(jù)塊,執(zhí)行不同數(shù)據(jù)塊的任務 隊列中的任務;因此,不會存在多個線程同時競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題。
[0065] 本發(fā)明實施例中的用于執(zhí)行任務調度方法的多核設備可以為個人計算機 ((personal computer,PC)、服務器等可以進行圖像、音頻、視頻等中的"流式應用"處理的 多核計算機設備。
[0066] 下面結合附圖,通過具體的實施例及其應用場景,以任務調度方法的執(zhí)行主體為 上述任務調度方法裝置為例,對本發(fā)明實施例提供的一種任務調度方法進行詳細地說明。 [0067] 實施例一
[0068]本發(fā)明實施例提供的一種任務調度方法,如圖2所示,該任務調度方法包括:
[0069] S101、任務調度裝置根據(jù)待執(zhí)行的多個任務與多個任務待訪問的M個數(shù)據(jù)塊的對 應關系,將多個任務中的每個任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列。
[0070] 其中,M個數(shù)據(jù)塊與M個任務隊列一一對應。
[0071]示例性的,如圖3所示,假設當前存在待訪問的3個數(shù)據(jù)塊(DBQ、DB^DB2)<^Sf 數(shù)據(jù)塊中,DBo與任務隊列0對應,DBi與任務隊列1對應,DB2與任務隊列2對應。
[0072]假設當前的多個任務(任務a、任務b、任務c、任務d、任務e、任務f和任務g)中,任務 a與DBo和DB2存在對應關系,任務b與DBo存在對應關系,任務c與DBo存在對應關系,任務d與 DBo和DBi存在對應關系,任務e與DBi存在對應關系,任務f?與DBi存在對應關系,任務個g與DB 2 存在對應關系;那么,如圖4所示,任務調度裝置便可以將任務a、任務b、任務c和任務d添加 到DBo的任務隊列(任務隊列0),可以將任務d、任務e和任務f添加到DBi的任務隊列(任務隊 列1),可以將任務g和任務a添加到DB 2的任務隊列(任務隊列2)。
[0073]需要說明的是,由于上述待執(zhí)行的多個任務是任務調度裝置針對上述M個數(shù)據(jù)塊 創(chuàng)建的,因此在創(chuàng)建該多個任務時,便指定了該多個任務中每個任務對應的數(shù)據(jù)塊。
[0074]其中,任務調度裝置可以根據(jù)需求為不同的數(shù)據(jù)塊創(chuàng)建各自的任務,任務調度裝 置為每一個數(shù)據(jù)塊創(chuàng)建的任務不盡相同,其任務的數(shù)量也不盡相同。
[0075]可以想到的是,任務調度裝置在為每一個數(shù)據(jù)塊創(chuàng)建任務時,都會指定該任務是 針對哪一個數(shù)據(jù)塊創(chuàng)建的;從而任務調度裝置可以根據(jù)創(chuàng)建任務時各個任務所指定的數(shù)據(jù) 塊,將創(chuàng)建的任務分別添加至該任務指定的數(shù)據(jù)塊的任務隊列。
[0076] 如圖4所示,任務調度裝置為DBo創(chuàng)建了 4個任務,包括:任務a、任務b、任務c和任務 d;任務調度裝置為DBi創(chuàng)建了 3個任務,包括:任務d、任務e和任務f;任務調度裝置為DB2創(chuàng)建 了 2個任務,包括:任務g和任務a。
[0077]需要說明的是,任務調度裝置為數(shù)據(jù)塊創(chuàng)建任務的方法可以參考現(xiàn)有技術中為數(shù) 據(jù)塊創(chuàng)建任務的相關方法,本發(fā)明實施例這里不再贅述。
[0078] S102、任務調度裝置采用N個線程并行執(zhí)行M個任務隊列中N個任務隊列中的任務, 該N個線程中的每個線程執(zhí)行該N個任務隊列中一個任務隊列中的任務,該N個線程中不同 的線程執(zhí)行不同任務隊列中的任務,2SNSM。
[0079] 其中,任務調度裝置可以采用N個線程作為N個調度器線程,并行調度N個任務隊 列,分別采用該N個線程中的每個線程執(zhí)行N個任務隊列中的一個任務隊列中的任務。
[0080] 在本發(fā)明實施例中,上述N個線程中的任一線程執(zhí)行一任務隊列中的任務的方法 可以為:該線程逐個執(zhí)行該任務隊列中的每個任務。
[0081 ] 示例性的,如圖5所示,任務調度裝置可以采用ThreadoJhreacU和Threads并行執(zhí) 行任務隊列0、任務隊列1和任務隊列2中的任務。具體的,任務調度裝置可以同時執(zhí)行:采用 Threado執(zhí)行任務隊列0中的任務a、任務b、任務c和任務d;采用Threadi執(zhí)行任務隊列1中的 任務d、任務e和任務f;采用Threat^執(zhí)行任務隊列2中的任務g和任務a。
[0082] 以圖5所示的Threado、Threadi和Thread〗并行執(zhí)行任務隊列0、任務隊列1和任務隊 列2中的任務為例。雖然在Threado、Threadi和Thread〗并行執(zhí)行任務隊列0、任務隊列1和任 務隊列2中的任務的過程中,需要針對DBo執(zhí)行任務a、任務b、任務c和任務d,針對DBi執(zhí)行任 務d、任務e和任務f,針對DB 2執(zhí)行任務g和任務a;但是,對于每一個數(shù)據(jù)塊而言,僅會采用一 個線程執(zhí)行該數(shù)據(jù)塊的任務隊列中的任務。如,采用Threado針對DBo執(zhí)行任務a、任務b、任務 c和任務d;采用Threadi針對DBi執(zhí)行任務d、任務e和任務f;采用Thread〗針對DB2執(zhí)行任務g 和任務a。由此可見,不會存在多個線程同時競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題。
[0083] 可以想到的是,本發(fā)明實施例中的N個線程可以為任務調度裝置根據(jù)系統(tǒng)配置創(chuàng) 建的。其中,在多核處理器系統(tǒng)中,為了保證充分利用系統(tǒng)硬件資源,通??梢詣?chuàng)建與當前 處理器核數(shù)(或硬件線程數(shù))相同個數(shù)的線程。即N可以為該任務調度裝置中的處理器核數(shù)。 其中,本發(fā)明實施例中的線程為操作系統(tǒng)線程(Operating System Thread,0S Thread)。
[0084] 示例性的,若該任務調度裝置中的處理器核數(shù)為3,那么該任務調度裝置則可以創(chuàng) 建3個線程包括:Thread。、Threadi和Thread〗。即一個處理器核上運行一個線程。
[0085] 本發(fā)明實施例提供的任務調度方法,可以以數(shù)據(jù)塊為中心,多個任務中的每個任 務分別添加到與該任務對應的數(shù)據(jù)塊的任務隊列;然后采用N個線程中的每個線程分別執(zhí) 行一個任務隊列中的任務。如此,即使多個線程并行運行,由于采用該多個線程中每一個線 程針對不同的數(shù)據(jù)塊,執(zhí)行不同數(shù)據(jù)塊的任務隊列中的任務;因此,不會存在多個線程同時 競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題。
[0086] 即通過本方案,可以減少采用多個線程并行執(zhí)行任務時,多個線程同時訪問一個 數(shù)據(jù)塊而引發(fā)的數(shù)據(jù)競爭,從而可以提高任務調度的效率。并且,由于本方案中無需引入鎖 機制,因此可以避免引入鎖帶來的額外性能開銷,降低并發(fā)錯誤的檢測和調試難度。
[0087] 此外,在本發(fā)明實施例中,一個線程在一定的時間段內,會逐個執(zhí)行一個數(shù)據(jù)塊的 任務隊列中的任務,即一個線程在一定的時間段內針對同一數(shù)據(jù)塊,執(zhí)行該數(shù)據(jù)塊對應的 任務;那么該線程在一定時間段內進行多次任務切換前后處理的數(shù)據(jù)是相同的。如此,可以 避免了傳統(tǒng)任務并行系統(tǒng)中因任務切換前后處理不同的數(shù)據(jù)而導致的大量緩存(cache)行 換出換入的問題,從而可以提尚訪存效率,提尚程序的性能。
[0088] 進一步的,由于系統(tǒng)性能或者系統(tǒng)配置的制約,系統(tǒng)中創(chuàng)建的線程的數(shù)量有限,而 數(shù)據(jù)塊的數(shù)量一般不會受到系統(tǒng)性能或者系統(tǒng)配置的制約;因此,當數(shù)據(jù)塊的數(shù)量大于線 程的數(shù)量時,則會有一部分數(shù)據(jù)塊的任務隊列需要等待N個線程中存在空閑線程時,再采用 空閑線程執(zhí)行該部分數(shù)據(jù)塊的任務隊列中的任務。
[0089] 例如,當系統(tǒng)中創(chuàng)建了 N個線程,而當前存在M(2彡N彡M)個數(shù)據(jù)塊的任務隊列中的 任務需要被執(zhí)行時,該N個線程則只能夠并行執(zhí)行M個任務隊列中N個任務隊列中的任務。剩 余的M-N個任務隊列則需要等待N個線程中存在空閑線程時,再采用空閑線程執(zhí)行這M-N個 任務隊列中的任務。
[0090] 基于此,如圖6所示,本發(fā)明實施例的方法還可以包括S10V :
[0091] S10V、任務調度裝置將M個任務隊列中的至少一個任務隊列添加至等待隊列組。
[0092] 其中,該至少一個任務隊列中的每個任務隊列中包含至少一個任務,且該至少一 個任務未被N個線程中的線程執(zhí)行。該等待隊列組用于按照先進先出的原則存放上述M個任 務隊列中的任務隊列。
[0093] 示例性的,當系統(tǒng)中創(chuàng)建的線程的數(shù)量有限,沒有空閑的線程來執(zhí)行剛剛生成的 數(shù)據(jù)塊的任務隊列時,任務調度裝置可以將生成的數(shù)據(jù)塊的任務隊列添加至等待隊列組。 如圖7所示,任務調度裝置可以將數(shù)據(jù)塊DB 3的任務隊列(任務隊列3)和DB4的任務隊列(任務 隊列4),添加至等待隊列(Wait Queue,Wait Q)組。
[0094] WQ組按照先進先出的原則存放已添加任務、但未被執(zhí)行的任務隊列。在圖7中,由 于DB3的任務隊列先于DB4的任務隊列添加至WQ組;因此,任務調度裝置可以在N個線程中的 任一線程為空閑線程時,優(yōu)先采用該空閑線程調度DB 3的任務隊列,執(zhí)行DB3的任務隊列中的 任務。
[0095]可以理解的是,將M個任務隊列中的至少一個任務隊列添加至等待隊列組后,上述 N個線程中的任一線程便可以在空閑后依據(jù)等待隊列組中存放任務隊列的原則,執(zhí)行等待 隊列組中存放任務隊列中的任務。
[0096] 可選的,如圖6所示,圖2中的S102可以替換為S102a:
[0097] S102a、任務調度裝置采用該N個線程,并行執(zhí)行上述等待隊列組中的前N個任務隊 列中的任務。
[0098] 其中,該前N個任務隊列為該等待隊列組中最先添加的N個任務隊列,該N個線程中 的每個線程按照先進先出原則執(zhí)行該前N個任務隊列中一相應的任務隊列中的任務。
[0099] 進一步的,當一線程開始執(zhí)行等待隊列組中的一個任務隊列后,則表示該任務隊 列當前不處于等待執(zhí)行狀態(tài)。為了及時更新等待隊列組中的任務隊列,使得該等待隊列組 中僅包括未被線程執(zhí)行的任務所在的任務隊列,如圖8所示,本發(fā)明實施例的方法還可以包 括S103:
[0100] S103、任務調度裝置將等待隊列組中被N個線程中的線程執(zhí)行的任務所在的任務 隊列刪除。
[0101] 其中,及時刪除等待隊列組中已經被N個線程中的線程執(zhí)行的任務所在的任務隊 列,等待隊列組中則不會包括已被線程執(zhí)行的任務所在的任務隊列。
[0102] 可以想到的是,系統(tǒng)中的任一線程可能會因為執(zhí)行完一個數(shù)據(jù)塊的任務隊列中的 所有任務而處于空閑狀態(tài),或者該線程可能會因為退出執(zhí)行一個數(shù)據(jù)塊的任務隊列中的任 務而處于空閑狀態(tài),即該線程為空閑線程。此時,該空閑線程則可以執(zhí)行在上述前N個任務 隊列后被添加到所述等待隊列組的首個任務隊列中的任務。
[0103] 具體的,如圖9所示,本發(fā)明實施例的方法還可以包括S104:
[0104] S104、任務調度裝置采用一空閑線程執(zhí)行等待隊列組中第一隊列中的任務,第一 隊列為在上述前N個任務隊列后被添加到該等待隊列組的首個任務隊列。
[0105] 其中,該空閑線程可以為N個線程中執(zhí)行完相應的任務隊列中的任務的線程。
[0106] 并且,為了實時更新該等待隊列組中的任務隊列,如圖9所示,本發(fā)明實施例的方 法還可以包括S105:
[0107] S105、任務調度裝置將被執(zhí)行的第一隊列從該等待隊列組中刪除。
[0108] 通過上述方案,及時刪除了等待隊列組中已經被執(zhí)行的任務所在的任務隊列,這 樣便可以保證等待隊列組中僅包括未被線程執(zhí)行的任務所在的任務隊列。
[0109] 進一步的,在S101之前,本發(fā)明實施例的方法還包括:任務調度裝置為M個數(shù)據(jù)塊 中的每一個數(shù)據(jù)塊創(chuàng)建任務隊列。
[0110] 其中,任務調度裝置為數(shù)據(jù)塊創(chuàng)建的任務隊列都是為了存放與該數(shù)據(jù)塊對應的任 務。本發(fā)明實施例中任務調度裝置為每一個數(shù)據(jù)塊初始創(chuàng)建的任務隊列均置空。
[0111] 示例性的,如圖3所示,任務調度裝置可以以數(shù)據(jù)塊為中心,為DBo創(chuàng)建一個用于添 加DBo對應任務的任務隊列0,為DBi創(chuàng)建一個用于添加DBi對應任務的任務隊列1,為DB 2創(chuàng)建 一個用于添加DB2對應任務的任務隊列2。
[0112] 進一步的,在任務調度裝置為M個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊創(chuàng)建任務隊列之前,任 務調度裝置可以為M個數(shù)據(jù)塊分配用于保存該M個數(shù)據(jù)塊的任務隊列的內存空間。具體的, 本發(fā)明實施例的方法還可以包括:任務調度裝置為M個數(shù)據(jù)塊分配內存空間,內存空間用于 保存M個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊的任務隊列。
[0113] 示例性的,任務調度裝置可以根據(jù)M個數(shù)據(jù)塊中數(shù)據(jù)塊的數(shù)據(jù)塊類型、數(shù)據(jù)塊的大 小以及數(shù)據(jù)塊的數(shù)目,為該M個數(shù)據(jù)塊分配內存空間。
[0114] 需要說明的是,任務調度裝置為M個數(shù)據(jù)塊分配內存空間的其他方法可以參考現(xiàn) 有技術在數(shù)據(jù)處理過程中為數(shù)據(jù)塊分配內存空間的相關方法,此處不再贅述。
[0115] 進一步的,上述實施例中,S102、S102a或S104中,任務調度裝置采用一個線程(如 第一線程)執(zhí)行一個任務隊列(如第二隊列)中的任務的方法具體可以包括Sa-Sb:
[0116] Sa、任務調度裝置采用第一線程讀取第二隊列中的第k個任務,并切換到第二隊列 中的第k個任務的上下文開始執(zhí)行,l<k<K,K為第二隊列中的任務總數(shù)。
[0117] Sb、若任務調度裝置采用第一線程執(zhí)行完第二隊列中的第k個任務,則將第一線程 退出第二隊列中的第k個任務,并采用第一線程讀取第一隊列中的第k+1個任務,并切換到 第二隊列中的第k+1個任務的上下文開始執(zhí)行,直至第二隊列中的K個任務執(zhí)行完畢。
[0118] 進一步的,第一線程可能會因為第二任務中的第k個任務(即第一任務)等待來自 第三隊列的任務執(zhí)行結果,而退出執(zhí)行該第k個任務。對于這種情況,任務調度裝置采用一 第一線程執(zhí)第二隊列中的任務的方法還可以包括Sc:
[0119] Sc、任務調度裝置將第一線程退出執(zhí)行正在等待第三隊列的任務執(zhí)行結果的第一 任務(第二隊列中的第k個任務);將退出執(zhí)行的第一任務添加至第三隊列;待該第一任務獲 得任務執(zhí)行結果后,采用第二線程執(zhí)行第二隊列中的第一任務。
[0120]其中,第二隊列為上述等待隊列組中的任一任務隊列,第三隊列為等待隊列組中 不同于該第二隊列的任務隊列。
[0121]可以理解的是,在將第一線程退出執(zhí)行正在等待任務執(zhí)行結果的第一任務后,則 不能采用該第一線程執(zhí)行第一任務所在任務隊列(第二隊列)中的其他任務。此時,該第一 線程就成了一個空閑線程,則可以用于執(zhí)行等待任務組中其他任務隊列中的任務。
[0122]由此可知,上述實施例中的空閑線程(如S104中所述的空閑線程)則不僅可以為N 個線程中執(zhí)行完相應的任務隊列中的任務的線程;空閑線程還可以為N個線程中退出執(zhí)行 相應的任務隊列中的任務的線程。
[0123] 并且,在第一任務獲得任務執(zhí)行結果后,也可以采用一個空閑線程第二隊列中的 第一任務。即上述第二線程在第一任務獲得任務執(zhí)行結果時,為空閑線程。
[0124] 同理,該第二線程可以為上述N個線程中執(zhí)行完相應的任務隊列中的任務的線程; 或者,該第二線程為上述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。
[0125] 示例性的,任務調度裝置可以通過以下算法程序實現(xiàn)"任務調度裝置采用一個線 程a執(zhí)行一個任務隊列中的任務"。具體算法程序如下所示: Algorithm DBOS Schedule 1: function Schedule () 2 while true do 3: while Wait Q not empty do 4: lock (Wait Q)
[0126] 5 current Task ^ Wait Q.dequeuei) 6 unlock ( Wait Q ) 7: while current Task not null do 8: swap Context ( current Task ) 9 if current Task done then 10: .current Task: - .current Tusk.next 11: continue 12 end if 13 if current Task blocked by another task t then 14: add To Waiting List ( mrrmt Task, t ) 15 break
[0127] 16: end if 17: end while 18- end while IQ: suspend until ^Vait Q is empty 20: end while 21: end function
[0128] 其中,上述算法程序的詳細描述如下所示:
[0129] 上述算法程序中第3-18行用于循環(huán)判斷Wait Q(即本發(fā)明實施例中的等待隊列 組)是否為空;
[0130] 如果Wait Q為空,則表示當前系統(tǒng)中沒有任務隊列待處理,此時線程(即調度器線 程)被掛起(詳見上述算法程序中第19行);
[0131] 如果Wait Q非空,則采用線程a讀取Wait Q中任務隊列1中的第一個任務(詳見上 述算法程序中第4-6行),切換到該任務隊列1的第一個任務的上下文開始執(zhí)行(詳見上述算 法程序中第8行);其中,任務隊列1為Wait Q中當前包含的任務隊列中,最先添加至該Wait Q的任務隊列;
[0132] 將線程a退出執(zhí)行任務隊列1中的第一個任務后,判斷線程a退出執(zhí)行任務隊列1中 的第一個任務的原因(詳見上述算法程序中第9-16行);
[0133] 如果由于線程a執(zhí)行完任務隊列1中的第一個任務,將線程a退出執(zhí)行任務隊列1中 的第一個任務(詳見上述算法程序中第9行),則采用線程a讀取該任務隊列1中的第二個任 務,并切換到任務隊列1的第二個任務的上下文開始執(zhí)行(詳見上述算法程序中第10-11 行);
[0134] 如果因為任務隊列1中的第一個任務等待任務隊列t的任務執(zhí)行結果,將線程a退 出執(zhí)行任務隊列1中的第一個任務(詳見上述算法程序中第13行),則將任務隊列1中的第一 個任務添加至任務隊列t,待任務隊列a中的第一個任務獲得任務隊列t的任務執(zhí)行結果后, 采用一個空閑線程執(zhí)行任務隊列1中的第一個任務(詳見上述算法程序中第14行)。其中,任 務隊列t為Wait Q中不同于任務隊列1的一個任務隊列。
[0135] 其中,在因為任務隊列1中的第一個任務等待任務隊列t的任務執(zhí)行結果,將線程a 退出執(zhí)行任務隊列1中的第一個任務后,該線程a則變成空閑線程,該線程a可以用于執(zhí)行 Wait Q中的下一個任務隊列中的任務(詳見上述算法程序中第15行)。
[0136] 本發(fā)明實施例提供的任務調度方法,可以以數(shù)據(jù)塊為中心,多個任務中的每個任 務分別添加到與該任務對應的數(shù)據(jù)塊的任務隊列;然后采用N個線程中的每個線程分別執(zhí) 行一個任務隊列中的任務。如此,即使多個線程并行運行,由于采用該多個線程中每一個線 程針對不同的數(shù)據(jù)塊,執(zhí)行不同數(shù)據(jù)塊的任務隊列中的任務;因此,不會存在多個線程同時 競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題。
[0137] 即通過本方案,可以減少采用多個線程并行執(zhí)行任務時,多個線程同時訪問一個 數(shù)據(jù)塊而引發(fā)的數(shù)據(jù)競爭,從而可以提高任務調度的效率。并且,由于本方案中無需引入鎖 機制,因此可以避免引入鎖帶來的額外性能開銷,降低并發(fā)錯誤的檢測和調試難度。
[0138] 并且,還可以在沒有空閑的線程可用于執(zhí)行任務隊列中的任務時,將該任務隊列 添加至等待隊列組;并且,可以及時刪除等待隊列組中已經被執(zhí)行的任務所在的任務隊列, 使得等待隊列組中不包括已被線程執(zhí)行的任務所在的任務隊列。
[0139] 實施例二
[0140] 本發(fā)明實施例提供一種任務調度裝置,如圖10所示,該任務調度裝置包括:任務添 加模塊21和任務執(zhí)行模塊22。
[0141]任務添加模塊21,用于根據(jù)待執(zhí)行的多個任務與該多個任務待訪問的M個數(shù)據(jù)塊 的對應關系,將該多個任務中的每個任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列,其中, 該M個數(shù)據(jù)塊與M個任務隊列一一對應。
[0142] 任務執(zhí)行模塊22,用于采用N個線程并行執(zhí)行上述任務添加模塊21添加至上述M個 任務隊列中N個任務隊列中的任務,其中,該N個線程中的每個線程執(zhí)行該N個任務隊列中一 個任務隊列中的任務,該N個線程中不同的線程執(zhí)行不同任務隊列中的任務,2SNSM。
[0143] 進一步的,如圖11所示,該任務調度裝置還可以包括:隊列添加模塊23。
[0144] 隊列添加模塊23,用于將上述M個任務隊列中的至少一個任務隊列添加至等待隊 列組,該至少一個任務隊列中的每個任務隊列中包含至少一個任務,且該至少一個任務未 被上述N個線程中的線程執(zhí)行。
[0145] 其中,上述等待隊列組用于按照先進先出的原則存放上述M個任務隊列中的任務 隊列。
[0146] 可以想到的是,上述至少一個任務隊列中每一個任務隊列中的任務都是由任務添 加模塊21添加至對應任務隊列的。
[0147] 進一步的,上述任務執(zhí)行模塊22,具體用于:
[0148] 采用上述N個線程,并行執(zhí)行上述等待隊列組中的前N個任務隊列中的任務。
[0149] 其中,該前N個任務隊列為該等待隊列組中最先添加的N個任務隊列,該N個線程中 的每個線程按照先進先出原則執(zhí)行該前N個任務隊列中一相應的任務隊列中的任務。
[0150] 進一步的,所述任務執(zhí)行模塊22,還用于采用一空閑線程執(zhí)行上述等待隊列組中 第一隊列中的任務,該第一隊列為在上述前N個任務隊列后被添加到等待隊列組的首個任 務隊列。
[0151]如圖12所示,該任務調度裝置還可以包括:隊列刪除模塊24。
[0152] 隊列刪除模塊24,用于將被所述任務執(zhí)行模塊22執(zhí)行的所述第一隊列從所述等待 隊列組中刪除。
[0153] 其中,上述空閑線程為上述N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或 者,上述空閑線程為上述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。
[0154] 進一步的,上述多個任務包括屬于第二隊列的第一任務,該第一任務在被第一線 程執(zhí)行的過程中等待來自第三隊列的任務執(zhí)行結果,該第一線程為所述N個線程中用于執(zhí) 行該第二隊列中的任務的線程,該第二隊列為上述等待隊列組中的任一任務隊列,該第三 隊列為上述等待隊列組中不同于該第二隊列的任務隊列。
[0155] 該任務調度裝置還可以包括:任務控制模塊。
[0156] 任務控制模塊,用于將所述第一線程退出執(zhí)行正在等待所述任務執(zhí)行結果的所述 第一任務。
[0157] 相應的,上述任務添加模塊21,還用于將退出執(zhí)行的所述第一任務添加至所述第 三隊列。
[0158] 上述任務執(zhí)行模塊22,還用于待所述第一任務獲得所述任務執(zhí)行結果后,采用第 二線程執(zhí)行所述第二隊列中的所述第一任務。
[0159] 其中,上述第二線程為上述N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或 者,上述第二線程為所述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。
[0160]進一步的,隊列刪除模塊24,還用于將所述等待隊列組中被所述N個線程中的線程 執(zhí)行的任務所在的任務隊列刪除。
[0161]需要說明的是,本發(fā)明實施例提供的任務調度裝置中各個功能模塊的詳細描述可 以參考本發(fā)明方法實施例中的相關內容,本實施例這里不再贅述。
[0162] 本發(fā)明實施例提供的任務調度裝置,可以以數(shù)據(jù)塊為中心,多個任務中的每個任 務分別添加到與該任務對應的數(shù)據(jù)塊的任務隊列;然后采用N個線程中的每個線程分別執(zhí) 行一個任務隊列中的任務。如此,即使多個線程并行運行,由于采用該多個線程中每一個線 程針對不同的數(shù)據(jù)塊,執(zhí)行不同數(shù)據(jù)塊的任務隊列中的任務;因此,不會存在多個線程同時 競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題。
[0163] 即通過本方案,可以減少采用多個線程并行執(zhí)行任務時,多個線程同時訪問一個 數(shù)據(jù)塊而引發(fā)的數(shù)據(jù)競爭,從而可以提高任務調度的效率。并且,由于本方案中無需引入鎖 機制,因此可以避免引入鎖帶來的額外性能開銷,降低并發(fā)錯誤的檢測和調試難度。
[0164] 此外,在本發(fā)明實施例中,一個線程在一定的時間段內,會逐個執(zhí)行一個數(shù)據(jù)塊的 任務隊列中的任務,即一個線程在一定的時間段內針對同一數(shù)據(jù)塊,執(zhí)行該數(shù)據(jù)塊對應的 任務;那么該線程在一定時間段內進行多次任務切換前后處理的數(shù)據(jù)是相同的。如此,可以 避免了傳統(tǒng)任務并行系統(tǒng)中因任務切換前后處理不同的數(shù)據(jù)而導致的大量緩存(cache)行 換出換入的問題,從而可以提尚訪存效率,提尚程序的性能。
[0165] 實施例三
[0166] 本發(fā)明實施例提供一種任務調度裝置,如圖13所示,該任務調度裝置包括:
[0167] 一個或多個處理器31、存儲器32、總線系統(tǒng)33,以及一個或多個應用程序,所述一 個或多個處理器31和所述存儲器32通過所述總線系統(tǒng)33相連;所述一個或多個應用程序存 儲在所述存儲器32中,所述一個或多個應用程序包括指令。
[0168] 所述處理器31用于執(zhí)行所述指令,并具體用于代替上述任務添加模塊21、任務執(zhí) 行模塊22、隊列添加模塊23以及隊列刪除模塊24等,執(zhí)行如圖2、圖6、圖8和圖9中任一附圖 所示的任務調度方法。即處理器31可以為上述任務添加模塊21、任務執(zhí)行模塊22、隊列添加 模塊23以及隊列刪除模塊24等功能單元或功能模塊的集成,即上述各功能模塊可以集成在 一個該處理器31中實現(xiàn)。
[0169] 所述處理器31可能是一個中央處理器(Central Processing Unii^Cro),或者是 特定集成電路(Application Specific Integrated Circuit,ASIC),或者是被配置成實施 本發(fā)明實施例的一個或多個集成電路。
[0170] 其中,總線可以是工業(yè)標準體系結構(Industry Standard Architecture,ISA)總 線、外部設備互連(Peripheral Component Interconnect,PCI)總線或擴展工業(yè)標準體系 結構(Extended Industry Standard Architecture,EISA)總線等。該總線可以分為地址總 線、數(shù)據(jù)總線、控制總線等。為便于表示,圖13中僅用一條粗線表示,但并不表示僅有一根總 線或一種類型的總線。
[0171] 本發(fā)明實施例還提供一種計算機可讀存儲介質,該計算機可讀存儲介質中存儲有 一個或多個程序代碼,所述一個或多個程序代碼包括指令,當所述任務調度裝置的處理器 31執(zhí)行所述指令時,所述任務調度裝置執(zhí)行如圖2、圖6、圖8和圖9中任一附圖所示的任務調 度方法。
[0172] 所述計算機可讀存儲介質可能包含高速RAM存儲器,也可能還包括非易失性存儲 器(non-volatile memory),例如至少一個磁盤存儲器。
[0173]需要說明的是,上述程序代碼可以作為運行于任務調度裝置的嵌入式操作系統(tǒng)的 一個組件,也可以作為運行于任務調度裝置上的各種應用程序中的一個組件,相對而言,當 上述實施例中提供的任務調度方法作為嵌入式操作系統(tǒng)的一個組件時,可以無需對應用程 序進行修改,實施難度和修改工作量較小。
[0174] 其中,在具體實現(xiàn)過程中,上述圖2、圖6、圖8和圖9中任一附圖所示的方法流程中 的各步驟均可以通過硬件形式的任務調度裝置執(zhí)行上述非易失性存儲介質中存儲的軟件 形式的程序代碼實現(xiàn)。
[0175] 需要說明的是,本發(fā)明實施例提供的任務調度裝置中你功能模塊的具體描述可以 參考本發(fā)明方法實施例中對應部分的相關描述,本實施例這里不再贅述。
[0176] 本發(fā)明實施例提供的任務調度裝置,可以以數(shù)據(jù)塊為中心,多個任務中的每個任 務分別添加到與該任務對應的數(shù)據(jù)塊的任務隊列;然后采用N個線程中的每個線程分別執(zhí) 行一個任務隊列中的任務。如此,即使多個線程并行運行,由于采用該多個線程中每一個線 程針對不同的數(shù)據(jù)塊,執(zhí)行不同數(shù)據(jù)塊的任務隊列中的任務;因此,不會存在多個線程同時 競爭一個數(shù)據(jù)塊或者一個數(shù)據(jù)塊的鎖的問題。
[0177] 即通過本方案,可以減少采用多個線程并行執(zhí)行任務時,多個線程同時訪問一個 數(shù)據(jù)塊而引發(fā)的數(shù)據(jù)競爭,從而可以提高任務調度的效率。并且,由于本方案中無需引入鎖 機制,因此可以避免引入鎖帶來的額外性能開銷,降低并發(fā)錯誤的檢測和調試難度。
[0178] 此外,在本發(fā)明實施例中,一個線程在一定的時間段內,會逐個執(zhí)行一個數(shù)據(jù)塊的 任務隊列中的任務,即一個線程在一定的時間段內針對同一數(shù)據(jù)塊,執(zhí)行該數(shù)據(jù)塊對應的 任務;那么該線程在一定時間段內進行多次任務切換前后處理的數(shù)據(jù)是相同的。如此,可以 避免了傳統(tǒng)任務并行系統(tǒng)中因任務切換前后處理不同的數(shù)據(jù)而導致的大量緩存(cache)行 換出換入的問題,從而可以提尚訪存效率,提尚程序的性能。
[0179] 通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到,為描述的 方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據(jù)需要而將上 述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成 以上描述的全部或者部分功能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前 述方法實施例中的對應過程,在此不再贅述。
[0180] 在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng),裝置和方法,可以 通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊或 單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元 或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所 顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的 間接耦合或通信連接,可以是電性,機械或其它的形式。
[0181]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯 示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個 網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目 的。
[0182] 另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以 是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單 元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
[0183] 所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產品銷售或使用 時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上 或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式 體現(xiàn)出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機 設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本發(fā)明各個 實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器 (R0M,Read_0nly Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤 等各種可以存儲程序代碼的介質。
[0184] 以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何 熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到變化或替換,都應涵 蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以所述權利要求的保護范圍為準。
【主權項】
1. 一種任務調度方法,其特征在于,所述方法包括: 根據(jù)待執(zhí)行的多個任務與所述多個任務待訪問的M個數(shù)據(jù)塊的對應關系,將所述多個 任務中的每個任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列,其中,所述M個數(shù)據(jù)塊與M個 任務隊列 對應; 采用N個線程并行執(zhí)行所述M個任務隊列中N個任務隊列中的任務,其中,所述N個線程 中的每個線程執(zhí)行所述N個任務隊列中一個任務隊列中的任務,所述N個線程中不同的線程 執(zhí)行不同任務隊列中的任務,2<N<M。2. 根據(jù)權利要求1所述的方法,其特征在于,所述方法還包括: 將所述M個任務隊列中的至少一個任務隊列添加至等待隊列組,所述至少一個任務隊 列中的每個任務隊列中包含至少一個任務,且所述至少一個任務未被所述N個線程中的線 程執(zhí)行; 其中,所述等待隊列組用于按照先進先出的原則存放所述M個任務隊列中的任務隊列。3. 根據(jù)權利要求2所述的方法,其特征在于,所述采用N個線程并行執(zhí)行所述M個任務隊 列中N個任務隊列中的任務,包括: 采用所述N個線程,并行執(zhí)行所述等待隊列組中的前N個任務隊列中的任務; 其中,所述前N個任務隊列為所述等待隊列組中最先添加的N個任務隊列,所述N個線程 中的每個線程按照所述先進先出原則執(zhí)行所述前N個任務隊列中一相應的任務隊列中的任 務。4. 根據(jù)權利要求3所述的方法,其特征在于,所述方法還包括: 采用一空閑線程執(zhí)行所述等待隊列組中第一隊列中的任務,所述第一隊列為在所述前 N個任務隊列后被添加到所述等待隊列組的首個任務隊列; 將被執(zhí)行的所述第一隊列從所述等待隊列組中刪除; 其中,所述空閑線程為所述N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或者, 所述空閑線程為所述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。5. 根據(jù)權利要求1-4中任一項所述的方法,其特征在于,所述多個任務包括屬于第二隊 列的第一任務,所述第一任務在被第一線程執(zhí)行的過程中等待來自第三隊列的任務執(zhí)行結 果,所述第一線程為所述N個線程中用于執(zhí)行所述第二隊列中的任務的線程,所述第二隊列 為所述等待隊列組中的任一任務隊列,所述第三隊列為所述等待隊列組中不同于所述第二 隊列的任務隊列;所述方法還包括: 將所述第一線程退出執(zhí)行正在等待所述任務執(zhí)行結果的所述第一任務; 將退出執(zhí)行的所述第一任務添加至所述第三隊列; 待所述第一任務獲得所述任務執(zhí)行結果后,采用第二線程執(zhí)行所述第二隊列中的所述 第一任務; 其中,所述第二線程為所述N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或者, 所述第二線程為所述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。6. 根據(jù)權利要求2-4中任一項所述的方法,其特征在于,所述方法還包括: 將所述等待隊列組中被所述N個線程中的線程執(zhí)行的任務所在的任務隊列刪除。7. -種任務調度裝置,其特征在于,所述裝置包括: 任務添加模塊,用于根據(jù)待執(zhí)行的多個任務與所述多個任務待訪問的M個數(shù)據(jù)塊的對 應關系,將所述多個任務中的每個任務添加到與該任務對應的數(shù)據(jù)塊的任務隊列,其中,所 述M個數(shù)據(jù)塊與M個任務隊列一一對應; 任務執(zhí)行模塊,用于采用N個線程并行執(zhí)行所述任務添加模塊添加至所述M個任務隊列 中N個任務隊列中的任務,其中,所述N個線程中的每個線程執(zhí)行所述N個任務隊列中一個任 務隊列中的任務,所述N個線程中不同的線程執(zhí)行不同任務隊列中的任務,2<N<M。8. 根據(jù)權利要求7所述的裝置,其特征在于,所述裝置還包括: 隊列添加模塊,用于將所述M個任務隊列中的至少一個任務隊列添加至等待隊列組,所 述至少一個任務隊列中的每個任務隊列中包含至少一個任務,且所述至少一個任務未被所 述N個線程中的線程執(zhí)行; 其中,所述等待隊列組用于按照先進先出的原則存放所述M個任務隊列中的任務隊列。9. 根據(jù)權利要求8所述的裝置,其特征在于,所述任務執(zhí)行模塊,具體用于: 采用所述N個線程,并行執(zhí)行所述等待隊列組中的前N個任務隊列中的任務; 其中,所述前N個任務隊列為所述等待隊列組中最先添加的N個任務隊列,所述N個線程 中的每個線程按照所述先進先出原則執(zhí)行所述前N個任務隊列中一相應的任務隊列中的任 務。10. 根據(jù)權利要求9所述的裝置,其特征在于,所述任務執(zhí)行模塊,還用于采用一空閑線 程執(zhí)行所述等待隊列組中第一隊列中的任務,所述第一隊列為在所述前N個任務隊列后被 添加到所述等待隊列組的首個任務隊列; 所述裝置還包括: 隊列刪除模塊,用于將被所述任務執(zhí)行模塊執(zhí)行的所述第一隊列從所述等待隊列組中 刪除; 其中,所述空閑線程為所述N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或者, 所述空閑線程為所述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。11. 根據(jù)權利要求7-10中任一項所述的裝置,其特征在于,所述多個任務包括屬于第二 隊列的第一任務,所述第一任務在被第一線程執(zhí)行的過程中等待來自第三隊列的任務執(zhí)行 結果,所述第一線程為所述N個線程中用于執(zhí)行所述第二隊列中的任務的線程,所述第二隊 列為所述等待隊列組中的任一任務隊列,所述第三隊列為所述等待隊列組中不同于所述第 二隊列的任務隊列;所述裝置還包括: 任務控制模塊,用于將所述第一線程退出執(zhí)行正在等待所述任務執(zhí)行結果的所述第一 任務; 相應的,所述任務添加模塊,還用于將退出執(zhí)行的所述第一任務添加至所述第三隊列; 所述任務執(zhí)行模塊,還用于待所述第一任務獲得所述任務執(zhí)行結果后,采用第二線程 執(zhí)行所述第二隊列中的所述第一任務; 其中,所述第二線程為所述N個線程中執(zhí)行完相應的任務隊列中的任務的線程;或者, 所述第二線程為所述N個線程中退出執(zhí)行相應的任務隊列中的任務的線程。12. 根據(jù)權利要求10所述的裝置,其特征在于,所述隊列刪除模塊,還用于將所述等待 隊列組中被所述N個線程中的線程執(zhí)行的任務所在的任務隊列刪除。13. -種任務調度裝置,其特征在于,所述裝置包括:一個或多個處理器、存儲器、總線 和通信接口; 所述存儲器用于存儲計算機執(zhí)行指令,所述處理器與所述存儲器通過所述總線連接, 當所述任務調度裝置運行時,所述處理器執(zhí)行所述存儲器存儲的所述計算機執(zhí)行指令,以 使所述任務調度裝置執(zhí)行如權利要求1-6任意一項所述的任務調度方法。
【文檔編號】G06F9/48GK105893126SQ201610188139
【公開日】2016年8月24日
【申請日】2016年3月29日
【發(fā)明人】趙鵬, 劉雷, 曹瑋
【申請人】華為技術有限公司, 中國科學院計算技術研究所