一種分配工作任務的方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明實施例涉及信息系統(tǒng)的技術領域,尤其涉及一種分配工作任務的方法及裝置。
【背景技術】
[0002]信息系統(tǒng)中工作項是有優(yōu)先級順序的,要求排在前面的工作項先被處理,而且同一個工作項只能發(fā)給一個請求者。在多個人獲取工作項時,要求按請求者到達的先后順序按序發(fā)放工作項,最先請求者取得排在最前面的工作項,第二位請求者取得第2個工作項,后面的請求者以此類推。
[0003]針對這種需求,通常的做法是將工作項按序放到內存隊列中,這些隊列的實現(xiàn)方式有多種多樣,數(shù)組、列表、或鏈表等都可以;當有請求者請求任務時,鎖住整個隊列,然后取出最靠前的一個工作項,最后釋放對此隊列的鎖。在一個請求者對此隊列加鎖的過程中,其他請求者只能等待。這種內存隊列加鎖的方案保證了任務是按序下發(fā)的,同時保證了同一個工作項不會分發(fā)給兩個以上的請求者,而且由于采用的是內存隊列,相比直接從數(shù)據庫或硬盤文件中獲取任務來講,大大提高了性能。
[0004]但這種采用對共享內存隊列加鎖的方式有明顯的弊端:第一,會導致資源開銷;第二,會阻塞其他線程的執(zhí)行,使得1個線程占有鎖的過程中其它線程只能等待,被阻塞的線程會被系統(tǒng)暫停任務的執(zhí)行或使其進入睡眠狀態(tài)而不占用處理器,直到取得隊列鎖,該被阻塞的線程才能被喚醒,大量的時間浪費在了睡眠等待、搶占鎖、喚醒上,其導致的結果是處理速度慢、支持的并發(fā)數(shù)少,不能滿足大量作業(yè)人員并發(fā)獲取工作項的需要。
【發(fā)明內容】
[0005]本發(fā)明實施例的目的在于提出一種分配工作任務的方法及裝置,旨在解決如何實現(xiàn)高效的多線程并發(fā)獲取工作項任務的問題。
[0006]為達此目的,本發(fā)明實施例采用以下技術方案:
[0007]第一方面,一種分配工作任務的方法,所述方法包括:
[0008]裝載工作項任務隊列到二維數(shù)組中,二維數(shù)組的一維表示工作項類型,另一維表示具體的工作項任務隊列,并為每個工作項類型設置工作項序號取值范圍;
[0009]獲取用戶發(fā)送的處理工作任務的請求;
[0010]為所述請求創(chuàng)建任務分配線程;
[0011]通過所述任務分配線程執(zhí)行原子操作,為所述請求分配工作項序號;
[0012]若所分配的工作項序號超過所述工作項類型對應的工作項序號取值范圍則返回沒有任務,否則,根據所述工作項序號提取工作任務,發(fā)送給所述用戶。
[0013]優(yōu)選地,通過所述任務分配線程執(zhí)行原子操作,為所述請求分配工作項序號包括:
[0014]通過所述任務分配線程,將工作項序號器的計數(shù)值按照設定規(guī)則進行計算,計算確定的數(shù)值作為分配的工作項序號;
[0015]將工作項序號器的計數(shù)值加1或減1,得到的數(shù)值作為分配的工作項序號。
[0016]優(yōu)選地,所述通過所述任務分配線程,將工作項序號器的計數(shù)值按照設定規(guī)則進行計算,計算確定的數(shù)值作為分配的工作項序號之前,還包括:
[0017]確定所述請求是否包括預先設置的工作項類型參數(shù);
[0018]若確定所述請求包括預先設置的工作項類型參數(shù),則通過原子操作為所述請求分配與所述工作項類型參數(shù)對應的工作項類型序號;
[0019]若確定所述請求未包括預先設置的工作項類型參數(shù),則為所述請求分配工作項類型序號;
[0020]根據所述工作項類型參數(shù),確定對應的工作項序號器。
[0021]優(yōu)選地,所述為所述請求分配工作項類型序號,包括:
[0022]執(zhí)行原子操作將工作項類型序號器的當前計數(shù)值加1或減1,得到新計數(shù)值;
[0023]若新計數(shù)值超出工作項類型序號的取值范圍,則將工作項類型序號器計數(shù)值設為取值范圍的最小值或最大值,并將此修改后的數(shù)值作為新計數(shù)值;
[0024]將新數(shù)值作為分配給所述請求的工作項類型序號。
[0025]優(yōu)選地,所述根據所述工作項序號提取工作任務,發(fā)送給所述用戶,包括:
[0026]根據所述工作項類型序號和工作項序號從預先存儲的二維數(shù)組中獲取工作任務,所述二維數(shù)組的行序號對應于工作項類型序號,列序號對應于工作項序號。
[0027]優(yōu)選地,所述方法還包括:
[0028]所述所分配的工作項序號如果超過所屬工作項類型對應的工作項序號取值范圍,則如果該工作項類型的任務裝載線程沒有啟動,則啟動該工作項類型的任務裝載線程,否貝1J,不需要進行啟動任務裝載線程;
[0029]工作項類型的任務裝載線程首先設置該工作項類型的工作項序號取值范圍為空,清空所述二維數(shù)組中所述工作項類型序號對應的所有工作任務,并重新裝載該工作項類型的工作任務到二維數(shù)組中,并設置該工作項類型的工作項序號取值范圍與所裝載的工作項個數(shù)相匹配。
[0030]第二方面,一種獲取工作任務的裝置,所述裝置包括:
[0031]裝載模塊,用于裝載工作項任務隊列到二維數(shù)組中,二維數(shù)組的一維表示工作項類型,另一維表示具體的工作項任務隊列,并為每個工作項類型設置工作項序號取值范圍;
[0032]第一獲取模塊,用于獲取用戶發(fā)送的處理工作任務的請求;
[0033]創(chuàng)建模塊,用于為所述請求創(chuàng)建任務分配線程;
[0034]第一分配模塊,用于通過所述任務分配線程執(zhí)行原子操作,為所述請求分配工作項序號;
[0035]發(fā)送模塊,若所分配的工作項序號超過所述工作項類型對應的工作項序號取值范圍則返回沒有任務,否則,根據所述工作項序號提取工作任務,發(fā)送給所述用戶。
[0036]優(yōu)選地,所述第一分配模塊,包括:
[0037]計算單元,用于通過所述任務分配線程,將工作項序號器的計數(shù)值按照設定規(guī)則進行計算,計算確定的數(shù)值作為分配的工作項序號;
[0038]所述計算單元,用于:
[0039]通過所述任務分配線程,將工作項序號器的計數(shù)值加1或減1,確定的數(shù)值作為分配的工作項序號。
[0040]優(yōu)選地,所述裝置還包括:
[0041]第一確定模塊,用于在通過所述任務分配線程,將工作項序號器的計數(shù)值按照設定規(guī)則進行計算,計算確定的數(shù)值作為分配的工作項序號之前,確定所述請求是否包括預先設置的工作項類型參數(shù);
[0042]第二分配模塊,用于若確定所述請求包括預先設置的工作項類型參數(shù),則通過原子操作為所述請求分配與所述工作項類型參數(shù)對應的工作項類型序號;
[0043]第三分配模塊,用于若確定所述請求未包括預先設置的工作項類型參數(shù),則為所述請求分配工作項類型序號;
[0044]第二確定模塊,用于根據所述工作項類型參數(shù),確定對應的工作項序號器。
[0045]優(yōu)選地,所述第三分配模塊,用于:
[0046]執(zhí)行原子操作將工作項類型序號器的當前計數(shù)值加1或減1,得到新計數(shù)值;
[0047]若新計數(shù)值超出工作項類型序號的取值范圍,則將工作項類型序號器計數(shù)值設為取值范圍的最小值或最大值,并將此修改后的數(shù)值作為新計數(shù)值;
[0048]將新數(shù)值作為分配給所述請求的工作項類型序號。
[0049]優(yōu)選地,所述發(fā)送模塊,用于:
[0050]根據所述工作項類型序號和工作項序號從預先存儲的二維數(shù)組中獲取工作任務,所述二維數(shù)組的行序號對應于工作項類型序號,列序號對應于工作項序號。
[0051 ] 優(yōu)選地,所述裝置還包括:
[0052]啟動模塊,用于所述所分配的工作項序號如果超過所屬工作項類型對應的工作項序號取值范圍,則如果該工作項類型的任務裝載線程沒有啟動,則啟動該工作項類型的任務裝載線程,否則,不需要進行啟動任務裝載線程;
[0053]處理模塊,用于工作項類型的任務裝載線程首先設置該工作項類型的工作項序號取值范圍為空,清空所述二維數(shù)組中所述工作項類型序號對應的所有工作任務,并重新裝載該工作項類型的工作任務到二維數(shù)組中,并設置該工作項類型的工作項序號取值范圍與所裝載的工作項個數(shù)相匹配。
[0054]本發(fā)明實施例通過裝載工作項任務隊列到二維數(shù)組中,二維數(shù)組的一維表示工作項類型,另一維表示具體的工作項任務隊列,并為每個工作項類型設置工作項序號取值范圍,獲取用戶發(fā)送的處理工作任務的請求;為所述請求創(chuàng)建任務分配線程,棄用加鎖、解鎖處理,減少排隊、耗時等的處理,支持多路并發(fā)的用戶發(fā)送的工作任務的請求;通過所述任務分配線程執(zhí)行原子操作,為所述請求分配工作項序號;若所分配的工作項序號超過所述工作項類型對應的工作項序號取值范圍則返回沒有任務,否則,根據所述工作項序號提取工作任務,發(fā)送給所述用戶,從而實現(xiàn)多路并發(fā)請求工作任務的目的,極大的提高系統(tǒng)處理性能。
【附圖說明】
[0055]圖1是本發(fā)明實施例分配工作任務的方法第一實施例的流程示意圖;
[0056]圖2是本發(fā)明實施例分配工作任務的方法第二實施例的流程示意圖;
[0057]圖3是本發(fā)明實施例提供的另一分配工作任務的方法的示意圖;
[0058]圖4是本發(fā)明實施例分配工作任務的裝置的功能模塊示意圖;
[0059]圖5是本發(fā)明實施例第一分配模塊504的功能模塊不意圖;
[0060]圖6是本發(fā)明實