任務(wù)并行處理方法和裝置制造方法
【專(zhuān)利摘要】本申請(qǐng)公開(kāi)了一種任務(wù)并行處理方法和裝置,其中,該方法包括:確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù);根據(jù)個(gè)數(shù)M判斷待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括多個(gè)待處理任務(wù)且個(gè)數(shù)相同;根據(jù)個(gè)數(shù)M確定多個(gè)能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)待處理任務(wù),其中,N為正整數(shù),且N是第一數(shù)值中的一個(gè);對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理。本申請(qǐng)解決了現(xiàn)有技術(shù)中任意指定一個(gè)整數(shù)對(duì)待處理任務(wù)進(jìn)行拆分而造成的對(duì)有些可以平均拆分的任務(wù)未被平均拆分而造成的資源浪費(fèi)和任務(wù)執(zhí)行速度降低的技術(shù)問(wèn)題。
【專(zhuān)利說(shuō)明】任務(wù)并行處理方法和裝置
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及互聯(lián)網(wǎng)領(lǐng)域,具體而言,涉及一種任務(wù)并行處理方法和裝置。
【背景技術(shù)】
[0002]目前為了提升軟件的處理能力,引入了并發(fā)處理的流程,簡(jiǎn)單地說(shuō),就是本來(lái)一件事情由一個(gè)人做,現(xiàn)在變成一件事情由兩個(gè)或者N個(gè)人做。通過(guò)這種方式,從理論上而言任務(wù)執(zhí)行的效率提升了 N倍。對(duì)于在軟件編程中,這種并發(fā)處理的流程更為普遍,一般將這種編程方式稱(chēng)作多線程編程,即,將原本一個(gè)線程處理的事情,拆分成多個(gè)線程來(lái)并發(fā)處理。
[0003]例如,對(duì)于Java數(shù)組或者是List等數(shù)據(jù)結(jié)構(gòu)的循環(huán)操作,就可以拆分成多個(gè)線程來(lái)同時(shí)進(jìn)行處理。假設(shè)現(xiàn)在有一個(gè)長(zhǎng)度為X的Java數(shù)組的循環(huán),就可以將這個(gè)數(shù)組拆分成N個(gè)大小為M的數(shù)組,并用N個(gè)線程分別處理這些數(shù)組。
[0004]然而,目前常用的拆分方式一般并不考慮待拆分的數(shù)組的總長(zhǎng)度是多少,而是通過(guò)定義一個(gè)固定的數(shù)值,用當(dāng)前的總數(shù)X去除以指定的這個(gè)數(shù)值進(jìn)行任務(wù)的拆分,而并不考慮當(dāng)前總數(shù)和這個(gè)指定數(shù)值之間的關(guān)系。例如,對(duì)于一個(gè)任務(wù)數(shù)是20的待處理任務(wù),預(yù)先定義了數(shù)值3,那么通過(guò)現(xiàn)有技術(shù)的方式,該待處理任務(wù)就將被拆分為:7,7,6這樣三個(gè)任務(wù)集合,這時(shí)就需要對(duì)6的任務(wù)集合進(jìn)行特殊處理,而且因?yàn)槊總€(gè)任務(wù)集合不是等長(zhǎng)的,因此每個(gè)任務(wù)集合的線程的處理速度也是不相同的,從而造成了資源的浪費(fèi)。然而,對(duì)于任務(wù)個(gè)數(shù)是20的待處理任務(wù)是可以分為平均分為4個(gè)待處理任務(wù)集合,每個(gè)集合中都有5個(gè)待處理任務(wù),從而每個(gè)任務(wù)集合的處理可以是相同的。相關(guān)技術(shù)中并未考慮到這個(gè)問(wèn)題,從而造成了不必要的資源浪費(fèi),也從一定程度上降低了任務(wù)執(zhí)行的效率。
[0005]針對(duì)上述問(wèn)題,尚未提出有效的解決方法。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)?zhí)峁┝艘环N任務(wù)并行處理方法和裝置,以至少解決現(xiàn)有技術(shù)中任意指定一個(gè)整數(shù)對(duì)待處理任務(wù)進(jìn)行拆分而造成的對(duì)有些可以平均拆分的任務(wù)未被平均拆分而造成的資源浪費(fèi)和任務(wù)執(zhí)行速度降低的技術(shù)問(wèn)題。
[0007]根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種任務(wù)并行處理方法,該方法包括:確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù);根據(jù)個(gè)數(shù)M判斷待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括多個(gè)待處理任務(wù)且個(gè)數(shù)相同;若待處理任務(wù)能被分為多個(gè)待處理任務(wù)集合,則根據(jù)個(gè)數(shù)M確定多個(gè)能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)待處理任務(wù),其中,N為正整數(shù),且N是第一數(shù)值中的一個(gè);對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理。
[0008]優(yōu)選地,在根據(jù)個(gè)數(shù)M判斷待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合之后,上述方法還包括:若待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合,則根據(jù)M-1或M+1確定所有能將待處理任務(wù)中的M-1或M+1個(gè)任務(wù)分為多個(gè)待處理任務(wù)集合的第二數(shù)值;將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括(M-1)/Q或(M+l)/Q個(gè)待處理任務(wù),其中,Q為正整數(shù),且Q是第二數(shù)值中的一個(gè)。
[0009]優(yōu)選地,確定N的值包括:確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);將第一數(shù)值中與線程的個(gè)數(shù)最接近,且小于線程的個(gè)數(shù)的數(shù)值作為N的值;或者確定Q的值包括:確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);將第二數(shù)值中與線程的個(gè)數(shù)最接近,且小于線程的個(gè)數(shù)的數(shù)值作為Q的值。
[0010]優(yōu)選地,根據(jù)個(gè)數(shù)M確定多個(gè)能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值包括:計(jì)算得到個(gè)數(shù)M的所有約數(shù);將所有約數(shù)中I和M之外的數(shù)值作為所有能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值。
[0011]優(yōu)選地,對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理包括:為多個(gè)待處理任務(wù)集合分配線程,其中,多個(gè)待處理任務(wù)集合中的每一個(gè)對(duì)應(yīng)一個(gè)線程,線程用于處理多個(gè)待處理任務(wù)集合中的每一個(gè)待處理任務(wù)集合中的一個(gè)待處理任務(wù);并行執(zhí)行線程。
[0012]根據(jù)本申請(qǐng)的另一方面,提供了一種任務(wù)并行處理裝置,包括:第一確定單元,用于確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù);判斷單元,用于根據(jù)個(gè)數(shù)M判斷待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括的待處理任務(wù)的個(gè)數(shù)相同;第二確定單元,用于當(dāng)待處理任務(wù)能被分為多個(gè)待處理任務(wù)集合時(shí),根據(jù)個(gè)數(shù)M確定多個(gè)能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;第一劃分單元,用于將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)待處理任務(wù),其中,N為正整數(shù),且N是第一數(shù)值中的一個(gè);處理單元,用于對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理。
[0013]優(yōu)選地,上述裝置還包括:第三確定單元,用于在判斷出待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合時(shí),根據(jù)M-1或M+1確定所有能將待處理任務(wù)中的M-1或M+1個(gè)任務(wù)分為多個(gè)待處理任務(wù)集合的第二數(shù)值;第二劃分單元,用于將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括(M-1)/Q或(M+1)/Q個(gè)待處理任務(wù),其中,Q為正整數(shù),且Q是第二數(shù)值中的一個(gè)。
[0014]優(yōu)選地,上述裝置還包括:第一確定模塊,用于確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);第二確定模塊,用于將第一數(shù)值中與線程的個(gè)數(shù)最接近,且小于線程的個(gè)數(shù)的數(shù)值作為N的值;或者第三確定模塊,用于將第二數(shù)值中與線程的個(gè)數(shù)最接近,且小于線程的個(gè)數(shù)的數(shù)值作為Q的值。
[0015]優(yōu)選地,第二確定單元包括:獲取單元,用于獲取個(gè)數(shù)M的所有約數(shù);第三確定單元,用于將所有約數(shù)中I和M之外的數(shù)值作為所有能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;存儲(chǔ)單元,用于將第一數(shù)值用數(shù)組的形式進(jìn)行存儲(chǔ)。
[0016]優(yōu)選地,處理單元包括:分配模塊,用于為多個(gè)待處理任務(wù)集合分配線程,其中,多個(gè)待處理任務(wù)集合中的每一個(gè)對(duì)應(yīng)一個(gè)線程,線程用于處理多個(gè)待處理任務(wù)集合中的每一個(gè)待處理任務(wù)集合中的一個(gè)待處理任務(wù);執(zhí)行模塊,用于并行執(zhí)行線程。
[0017]在本申請(qǐng)中,通過(guò)預(yù)先確定待處理任務(wù)中的任務(wù)個(gè)數(shù),并依據(jù)該任務(wù)個(gè)數(shù)確定可以將待處理任務(wù)進(jìn)行平均分配的數(shù)值集合,從該數(shù)值集合中選取一個(gè)數(shù)值對(duì)待處理任務(wù)進(jìn)行拆分,從而解決了現(xiàn)有技術(shù)中任意指定一個(gè)整數(shù)對(duì)待處理任務(wù)進(jìn)行拆分而造成的對(duì)有些可以平均拆分的任務(wù)未被平均拆分而造成的資源浪費(fèi)和任務(wù)執(zhí)行速度降低的技術(shù)問(wèn)題,達(dá)到了提高資源利用率和提高任務(wù)處理速度的技術(shù)效果。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0018]此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
[0019]圖1是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理系統(tǒng)的一種優(yōu)選結(jié)構(gòu)框圖;
[0020]圖2是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理裝置的一種優(yōu)選結(jié)構(gòu)框圖;
[0021]圖3是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理裝置的另一種優(yōu)選結(jié)構(gòu)框圖;
[0022]圖4是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理裝置的又一種優(yōu)選結(jié)構(gòu)框圖;
[0023]圖5是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理裝置的又一種優(yōu)選結(jié)構(gòu)框圖;
[0024]圖6是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理方法的一種優(yōu)選流程圖;
[0025]圖7是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理方法的另一種優(yōu)選流程圖;
[0026]圖8是根據(jù)本申請(qǐng)實(shí)施例的對(duì)數(shù)組進(jìn)程拆分的一種優(yōu)選流程圖。
【具體實(shí)施方式】
[0027]下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本申請(qǐng)。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0028]在描述本申請(qǐng)的各實(shí)施例的進(jìn)一步細(xì)節(jié)之前,將參考圖1來(lái)描述可用于實(shí)現(xiàn)本申請(qǐng)的原理的一個(gè)合適的計(jì)算體系結(jié)構(gòu)。在以下描述中,除非另外指明,否則將參考由一個(gè)或多個(gè)計(jì)算機(jī)執(zhí)行的動(dòng)作和操作的符號(hào)表示來(lái)描述本申請(qǐng)的各實(shí)施例。由此,可以理解,有時(shí)被稱(chēng)為計(jì)算機(jī)執(zhí)行的這類(lèi)動(dòng)作和操作包括計(jì)算機(jī)的處理單元對(duì)以結(jié)構(gòu)化形式表示數(shù)據(jù)的電信號(hào)的操縱。這一操縱轉(zhuǎn)換了數(shù)據(jù)或在計(jì)算機(jī)的存儲(chǔ)器系統(tǒng)中的位置上維護(hù)它,這以本領(lǐng)域的技術(shù)人員都理解的方式重配置或改變了計(jì)算機(jī)的操作。維護(hù)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是具有數(shù)據(jù)的格式所定義的特定屬性的存儲(chǔ)器的物理位置。然而,盡管在上述上下文中描述本申請(qǐng),但它并不意味著限制性的,如本領(lǐng)域的技術(shù)人員所理解的,后文所描述的動(dòng)作和操作的各方面也可用硬件來(lái)實(shí)現(xiàn)。
[0029]轉(zhuǎn)向附圖,其中相同的參考標(biāo)號(hào)指代相同的元素,本申請(qǐng)的原理被示為在一個(gè)合適的計(jì)算環(huán)境中實(shí)現(xiàn)。以下描述基于所述的本申請(qǐng)的實(shí)施例,并且不應(yīng)認(rèn)為是關(guān)于此處未明確描述的替換實(shí)施例而限制本申請(qǐng)。
[0030]圖1示出了可用于這些設(shè)備的一個(gè)示例計(jì)算機(jī)體系結(jié)構(gòu)的示意圖。出于描述的目的,所繪的體系結(jié)構(gòu)僅為合適環(huán)境的一個(gè)示例,并非對(duì)本申請(qǐng)的使用范圍或功能提出任何局限。也不應(yīng)將該計(jì)算系統(tǒng)解釋為對(duì)圖1所示的任一組件或其組合具有任何依賴(lài)或需求。
[0031]本申請(qǐng)的原理可以使用其它通用或?qū)S糜?jì)算或通信環(huán)境或配置來(lái)操作。適用于本申請(qǐng)的眾所周知的計(jì)算系統(tǒng)、環(huán)境和配置的示例包括但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器,多處理器系統(tǒng)、基于微處理的系統(tǒng)、小型機(jī)、大型計(jì)算機(jī)、以及包括任一上述系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境。
[0032]在其最基本的配置中,圖1中的任務(wù)并行處理系統(tǒng)100至少包括:一個(gè)網(wǎng)站的服務(wù)器102以及一個(gè)或多個(gè)客戶(hù)端104。服務(wù)器102可以包括但不限于微處理器MCU或可編程邏輯器件FPGA等的處理裝置、用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)裝置以及與客戶(hù)端通信的傳輸裝置;客戶(hù)端104可以包括:微處理器MCU、與服務(wù)器通信的傳輸裝置、與用戶(hù)交互的顯示裝置。在本說(shuō)明書(shū)和權(quán)利要求書(shū)中,“系統(tǒng)”也可以被定義為能夠執(zhí)行軟件、固件或微碼來(lái)實(shí)現(xiàn)功能的任何硬件組件或硬件組件的組合任務(wù)并行處理系統(tǒng)100甚至可以是分布式的,以實(shí)現(xiàn)分布式功能。
[0033]如本申請(qǐng)所使用的,術(shù)語(yǔ)“模塊”、“組件”或“單元”可以指在任務(wù)并行處理系統(tǒng)100上執(zhí)行的軟件對(duì)象或例程。此處所描述的不同組件、模塊、單元、引擎和服務(wù)可被實(shí)現(xiàn)為在任務(wù)并行處理系統(tǒng)100上執(zhí)行(例如,作為單獨(dú)的線程)的對(duì)象或進(jìn)程。盡管此處所描述的系統(tǒng)和方法較佳地以軟件來(lái)實(shí)現(xiàn),但是硬件或軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)
相的
心、U J O
[0034]實(shí)施例1
[0035]圖2是根據(jù)本申請(qǐng)實(shí)施例的任務(wù)并行處理裝置200的一種優(yōu)選的結(jié)構(gòu)示意圖,優(yōu)選的,本實(shí)施例中的裝置位于服務(wù)器102上或者客戶(hù)端104上。
[0036]優(yōu)選的,如圖2所示的任務(wù)并行處理裝置的一種優(yōu)選的結(jié)構(gòu)框圖可以包括:第一確定單元202,判斷單元204,第二確定單元206,第一劃分單元208,以及處理單元210。下面對(duì)這幾個(gè)結(jié)構(gòu)進(jìn)行具體的描述。
[0037]第一確定單元202,用于確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù);
[0038]判斷單元204,與第一確定單元202耦合,用于根據(jù)個(gè)數(shù)M判斷待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括多個(gè)待處理任務(wù)且個(gè)數(shù)相同;
[0039]S卩,根據(jù)待處理任務(wù)的個(gè)數(shù)來(lái)確定其是否可以平均分為多個(gè)子任務(wù)集合,以任務(wù)個(gè)數(shù)40和43為例進(jìn)行說(shuō)明,當(dāng)任務(wù)數(shù)為40時(shí),就可以平均將其平均分為5個(gè)每個(gè)集合中有8個(gè)任務(wù)的任務(wù)集合,然而,當(dāng)任務(wù)數(shù)為43時(shí),就只能平均分為43個(gè)任務(wù)集合,每個(gè)任務(wù)集合中僅有一個(gè)任務(wù)。對(duì)于上述情況,我們將有40個(gè)任務(wù)的算作可以被分為多個(gè)待處理任務(wù)集合,將43個(gè)任務(wù)算作不能被分為多個(gè)待處理任務(wù)集合。簡(jiǎn)言之,從數(shù)學(xué)的含義上來(lái)說(shuō),就是當(dāng)任務(wù)個(gè)數(shù)為合數(shù)時(shí),就算作可以,將任務(wù)個(gè)數(shù)為質(zhì)數(shù)時(shí)就算作不可以。
[0040]第二確定單元206,與判斷單元204耦合,用于當(dāng)待處理任務(wù)能被分為多個(gè)待處理任務(wù)集合時(shí),根據(jù)個(gè)數(shù)M確定多個(gè)能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;
[0041]第一劃分單元208,與第二確定單元206耦合,用于將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)待處理任務(wù),其中,N為正整數(shù),且N是第一數(shù)值中的一個(gè);
[0042]考慮到待處理任務(wù)的個(gè)數(shù)可能對(duì)應(yīng)的約數(shù)不是一個(gè),例如,40對(duì)應(yīng)的除了 I和40之外的約數(shù)還有:2、4、5、8、10、20。這樣只要按照一定的規(guī)則從這些數(shù)值中選擇一個(gè)數(shù)值作為最終的分組數(shù)即可,例如,可以選擇5作為并行處理的組數(shù),則對(duì)應(yīng)的每個(gè)待處理任務(wù)集合中就有8個(gè)子任務(wù),當(dāng)選擇8作為并行處理的組數(shù)時(shí),對(duì)應(yīng)的每個(gè)待處理任務(wù)集合中就有5個(gè)子任務(wù)。
[0043]處理單元210,與第一劃分單元208耦合,用于對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理。
[0044]對(duì)于劃分好的待處理任務(wù)集合就可以進(jìn)行并行處理了,因?yàn)槊總€(gè)任務(wù)集合中的任務(wù)數(shù)是相同的,這樣處理的速度以及所需要耗費(fèi)的時(shí)間也就相同了,可以有效提高資源的利用率和任務(wù)的處理速度。優(yōu)選地,可以采用線程的方式來(lái)對(duì)任務(wù)進(jìn)行執(zhí)行,即,可以為每個(gè)待處理任務(wù)集合分配一個(gè)線程,從而實(shí)現(xiàn)任務(wù)的并行處理。
[0045]在上述優(yōu)選實(shí)施方式中,通過(guò)預(yù)先確定待處理任務(wù)中的任務(wù)個(gè)數(shù),并依據(jù)該任務(wù)個(gè)數(shù)確定可以將待處理任務(wù)進(jìn)行平均分配的數(shù)值集合,從該數(shù)值集合中選取一個(gè)數(shù)值對(duì)待處理任務(wù)進(jìn)行拆分,從而解決了現(xiàn)有技術(shù)中任意指定一個(gè)整數(shù)對(duì)待處理任務(wù)進(jìn)行拆分而造成的對(duì)有些可以平均拆分的任務(wù)未被平均拆分而造成的資源浪費(fèi)和任務(wù)執(zhí)行速度降低的技術(shù)問(wèn)題,達(dá)到了提高資源利用率和提高任務(wù)處理速度的技術(shù)效果。
[0046]考慮到任務(wù)的個(gè)數(shù)可能是合數(shù),也可能是質(zhì)數(shù),對(duì)于質(zhì)數(shù)的情況,本申請(qǐng)實(shí)施例也給出了具體的解決方案,從實(shí)質(zhì)來(lái)說(shuō),對(duì)于質(zhì)數(shù)就是將其減I變?yōu)楹蠑?shù),這樣基于得到的合數(shù)對(duì)任務(wù)進(jìn)行平均拆分。對(duì)于多出來(lái)的這一個(gè)任務(wù)可以單獨(dú)增加一個(gè)線程進(jìn)行處理,也可以將其增加到任意一個(gè)線程中進(jìn)行處理??紤]到提高任務(wù)的并行處理的速度以及資源的有效利用,優(yōu)選的是增加一個(gè)單獨(dú)的線程對(duì)這個(gè)多出的任務(wù)進(jìn)行單獨(dú)處理。在一個(gè)優(yōu)選實(shí)施方式中,如圖3所示,上述裝置還包括:
[0047]第三確定單元302,與判斷單元204耦合,用于在判斷出待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合時(shí),根據(jù)M-1或M+1確定能將待處理任務(wù)中的M-1或M+1個(gè)任務(wù)分為多個(gè)待處理任務(wù)集合的第二數(shù)值;
[0048]第二劃分單元304,與第三確定單元302耦合,用于將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括(M-1)/Q或(M+1)/Q個(gè)待處理任務(wù),其中,Q為正整數(shù),且Q是第二數(shù)值中的一個(gè)。
[0049]舉例而言,當(dāng)待處理任務(wù)中有43個(gè)任務(wù)時(shí),因43是一個(gè)質(zhì)數(shù),只有I和自身兩個(gè)約數(shù),這個(gè)時(shí)候就可以將43減去I得到42,將42作為新的待處理任務(wù)的個(gè)數(shù)進(jìn)行拆分,這樣就可以將其拆分為6個(gè)任務(wù)集合,每個(gè)任務(wù)集合中有7個(gè)任務(wù)或者是拆分為7和任務(wù)集合,每個(gè)任務(wù)集合中有6個(gè)任務(wù)。然后,對(duì)于多出的一個(gè)任務(wù)進(jìn)行單獨(dú)的特殊處理即可。
[0050]考慮到系統(tǒng)的承載能力,同時(shí)并行處理的能力有時(shí)是有一定限制的,因此,在選擇進(jìn)行拆分的數(shù)值的時(shí)候,可以依據(jù)當(dāng)前系統(tǒng)的并行處理能力來(lái)確定選擇的拆分?jǐn)?shù)值,例如,如果當(dāng)前系統(tǒng)可以允許最多6個(gè)線程同時(shí)并行處理,那么對(duì)于42個(gè)任務(wù)的待處理任務(wù)就需要分為6個(gè)任務(wù)集合,而不分為7個(gè)任務(wù)集合。在一個(gè)優(yōu)選實(shí)施方式,上述裝置還包括:第一確定模塊,用于確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);第二確定模塊,用于將所述第二數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述N的值;或者第三確定模塊,用于將第二數(shù)值中與最大并行能力最接近,且小于最大并行能力的數(shù)值作為Q的值。
[0051]在一個(gè)優(yōu)選實(shí)施方式中,如圖4所示,第二確定單元206包括:
[0052]獲取單元402,與判斷單元204耦合,用于獲取個(gè)數(shù)M的所有約數(shù);
[0053]第三確定單元404,與獲取單元402耦合,用于將所有約數(shù)中I和M之外的數(shù)值作為所有能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;
[0054]存儲(chǔ)單元406,與第三確定單元404耦合,用于將第一數(shù)值用數(shù)組的形式進(jìn)行存儲(chǔ)。
[0055]對(duì)于劃分好的任務(wù)集合,可以是一個(gè)任務(wù)集合對(duì)應(yīng)一個(gè)線程,按照線程的方式對(duì)任務(wù)集合中的任務(wù)進(jìn)行并行處理。在一個(gè)優(yōu)選實(shí)施方式中,如圖5所示,處理單元210包括:分配模塊502,用于為所述多個(gè)待處理任務(wù)集合分配線程,其中,所述多個(gè)待處理任務(wù)集合中的每一個(gè)對(duì)應(yīng)一個(gè)所述線程,所述線程用于處理所述多個(gè)待處理任務(wù)集合中的每一個(gè)待處理任務(wù)集合中的一個(gè)待處理任務(wù);執(zhí)行模塊504,與分配模塊502耦合,用于并行執(zhí)行線程。
[0056]實(shí)施例2
[0057]在圖2-圖5所示的任務(wù)并行處理裝置的基礎(chǔ)上,本申請(qǐng)?zhí)峁┝艘环N優(yōu)選的任務(wù)并行處理方法。如圖6所示,該方法可以包括如下步驟:
[0058]步驟S602:確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù);
[0059]步驟S604:根據(jù)個(gè)數(shù)M判斷待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括多個(gè)待處理任務(wù)且個(gè)數(shù)相同;
[0060]S卩,根據(jù)待處理任務(wù)的個(gè)數(shù)來(lái)確定其是否可以平均分為多個(gè)子任務(wù)集合,以任務(wù)個(gè)數(shù)40和43為例進(jìn)行說(shuō)明,當(dāng)任務(wù)數(shù)為40時(shí),就可以平均將其平均分為5個(gè)每個(gè)集合中有8個(gè)任務(wù)的任務(wù)集合,然而,當(dāng)任務(wù)數(shù)為43時(shí),就只能平均分為43個(gè)任務(wù)集合,每個(gè)任務(wù)集合中僅有一個(gè)任務(wù)。對(duì)于上述情況,我們將有40個(gè)任務(wù)的算作可以被分為多個(gè)待處理任務(wù)集合,將43個(gè)任務(wù)算作不能被分為多個(gè)待處理任務(wù)集合。簡(jiǎn)言之,從數(shù)學(xué)的含義上來(lái)說(shuō),就是當(dāng)任務(wù)個(gè)數(shù)為合數(shù)時(shí),就算作可以,將任務(wù)個(gè)數(shù)為質(zhì)數(shù)時(shí)就算作不可以。
[0061]步驟S606:若待處理任務(wù)能被分為多個(gè)待處理任務(wù)集合,則根據(jù)個(gè)數(shù)M確定多個(gè)能將待處理任務(wù)分為多個(gè)待處理任務(wù)集合的第一數(shù)值;
[0062]步驟S608:將待處理任務(wù)分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)待處理任務(wù),其中,N為正整數(shù),且N是第一數(shù)值中的一個(gè);
[0063]考慮到待處理任務(wù)的個(gè)數(shù)可能對(duì)應(yīng)約數(shù)不是一個(gè),例如,40對(duì)應(yīng)的除了 I和40之外的約數(shù)還有:2、4、5、8、10、20。這樣只要按照一定的規(guī)則從這些數(shù)值中選擇一個(gè)數(shù)值作為最終的分組數(shù)即可,例如,可以選擇5作為并行處理的組數(shù),則對(duì)應(yīng)的每個(gè)待處理任務(wù)集合中就有8個(gè)子任務(wù),當(dāng)選擇8作為并行處理的組數(shù)時(shí),對(duì)應(yīng)的每個(gè)待處理任務(wù)集合中就有5個(gè)子任務(wù)。
[0064]步驟S610:對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理。
[0065]對(duì)于劃分好的待處理任務(wù)集合就可以進(jìn)行并行處理了,因?yàn)槊總€(gè)任務(wù)集合中的任務(wù)數(shù)是相同的,這樣處理的速度以及所需要耗費(fèi)的時(shí)間也就相同了,可以有效提高資源的利用率和任務(wù)的處理速度。優(yōu)選地,可以采用線程的方式來(lái)對(duì)任務(wù)進(jìn)行執(zhí)行,即,可以為每個(gè)待處理任務(wù)集合分配一個(gè)線程,從而實(shí)現(xiàn)任務(wù)的并行處理。
[0066]在上述優(yōu)選實(shí)施方式中,通過(guò)預(yù)先確定待處理任務(wù)中的任務(wù)個(gè)數(shù),并依據(jù)該任務(wù)個(gè)數(shù)確定可以將待處理任務(wù)進(jìn)行平均分配的數(shù)值集合,從該數(shù)值集合中選取一個(gè)數(shù)值對(duì)待處理任務(wù)進(jìn)行拆分,從而解決了現(xiàn)有技術(shù)中任意指定一個(gè)整數(shù)對(duì)待處理任務(wù)進(jìn)行拆分而造成的對(duì)有些可以平均拆分的任務(wù)未被平均拆分而造成的資源浪費(fèi)和任務(wù)執(zhí)行速度降低的技術(shù)問(wèn)題,達(dá)到了提高資源利用率和提高任務(wù)處理速度的技術(shù)效果。
[0067]考慮到任務(wù)的個(gè)數(shù)可能是合數(shù),也可能是質(zhì)數(shù),對(duì)于質(zhì)數(shù)的情況,本申請(qǐng)實(shí)施例也給出了具體的解決方案,從實(shí)質(zhì)來(lái)說(shuō),對(duì)于質(zhì)數(shù)就是將其減I變?yōu)楹蠑?shù),這樣基于得到的合數(shù)對(duì)任務(wù)進(jìn)行平均拆分。對(duì)于多出來(lái)的這一個(gè)任務(wù)可以單獨(dú)增加一個(gè)線程進(jìn)行處理,也可以將其增加到任意一個(gè)線程中進(jìn)行處理??紤]到提高任務(wù)的并行處理的速度以及資源的有效利用,優(yōu)選的是增加一個(gè)單獨(dú)的線程對(duì)這個(gè)多出的任務(wù)進(jìn)行單獨(dú)處理。在一個(gè)優(yōu)選實(shí)施方式中,在根據(jù)所述個(gè)數(shù)M判斷所述待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合之后,上述方法還可以包括:
[0068]若所述待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合,則根據(jù)M-1或M+1確定所有能將所述待處理任務(wù)中的M-1或M+1個(gè)任務(wù)分為所述多個(gè)待處理任務(wù)集合的第二數(shù)值;
[0069]將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括(M-l)/Q或(M+l)/Q個(gè)所述待處理任務(wù),其中,所述Q為正整數(shù),且所述Q是所述第二數(shù)值中的一個(gè)。
[0070]舉例而言,當(dāng)待處理任務(wù)中有43個(gè)任務(wù)時(shí),因43是一個(gè)質(zhì)數(shù),只有I和自身兩個(gè)約數(shù),這個(gè)時(shí)候就可以將43減去I得到42,將42作為新的待處理任務(wù)的個(gè)數(shù)進(jìn)行拆分,這樣就可以將其拆分為6個(gè)任務(wù)集合,每個(gè)任務(wù)集合中有7個(gè)任務(wù)或者是拆分為7和任務(wù)集合,每個(gè)任務(wù)集合中有6個(gè)任務(wù)。然后,對(duì)于多出的一個(gè)任務(wù)進(jìn)行單獨(dú)的特殊處理即可。
[0071]考慮到系統(tǒng)的承載能力,同時(shí)并行處理的能力有時(shí)是有一定限制的,因此,在選擇進(jìn)行拆分的數(shù)值的時(shí)候,可以依據(jù)當(dāng)前系統(tǒng)的并行處理能力來(lái)確定選擇的拆分?jǐn)?shù)值,例如,如果當(dāng)前系統(tǒng)可以允許最多6個(gè)線程同時(shí)并行處理,那么對(duì)于42個(gè)任務(wù)的待處理任務(wù)就需要分為6個(gè)任務(wù)集合,而不分為7個(gè)任務(wù)集合。在一個(gè)優(yōu)選實(shí)施方式,確定上述N的值包括:確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);將所述第一數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述N的值;或者確定上述Q的值包括:確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);將所述第二數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述Q的值。
[0072]對(duì)于上述根據(jù)所述個(gè)數(shù)M確定所有能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值就可以按照數(shù)學(xué)概念的合數(shù)的性質(zhì)來(lái)確定,即確定任務(wù)個(gè)數(shù)對(duì)應(yīng)的公約,如圖7所示,具體包括以下步驟:
[0073]步驟S702:計(jì)算得到所述個(gè)數(shù)M的所有約數(shù);
[0074]步驟S704:將所述所有約數(shù)中I和M之外的數(shù)值作為所有能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值。優(yōu)選地,上述確定的第一數(shù)值(即,除I和自身以外的公約)可以用數(shù)組的形式進(jìn)行存儲(chǔ),可以根據(jù)數(shù)組的長(zhǎng)度來(lái)確定是否是合數(shù),以及可以拆分的方式的多少。
[0075]對(duì)于劃分好的任務(wù)集合,可以是一個(gè)任務(wù)集合對(duì)應(yīng)一個(gè)線程,按照線程的方式對(duì)任務(wù)集合中的任務(wù)進(jìn)行并行處理。在一個(gè)優(yōu)選實(shí)施方式中,對(duì)多個(gè)待處理任務(wù)集合中的待處理任務(wù)進(jìn)行并行處理包括:為多個(gè)待處理任務(wù)集合分配線程,其中,多個(gè)待處理任務(wù)集合中的每一個(gè)對(duì)應(yīng)一個(gè)線程,線程用于處理多個(gè)待處理任務(wù)集合中的每一個(gè)待處理任務(wù)集合中的一個(gè)待處理任務(wù);并行執(zhí)行線程。
[0076]實(shí)施例3
[0077]本申請(qǐng)?zhí)峁┝艘粋€(gè)優(yōu)選的實(shí)施例來(lái)進(jìn)一步對(duì)本申請(qǐng)進(jìn)行解釋?zhuān)侵档米⒁獾氖牵搩?yōu)選實(shí)施例只是為了更好的描述本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)不當(dāng)?shù)南薅ā?br>
[0078]考慮到相關(guān)技術(shù)中在對(duì)任務(wù)進(jìn)行拆分的時(shí)候,并不考慮待拆分的數(shù)組的總長(zhǎng)度是多少,而是通過(guò)人為指定一個(gè)數(shù)值,用當(dāng)前總數(shù)X去除以指定的這個(gè)數(shù)值,從而實(shí)現(xiàn)拆分的目的,在這個(gè)過(guò)程中并不考慮當(dāng)前總數(shù)和這個(gè)指定數(shù)值的關(guān)系。對(duì)于拆分過(guò)程中,如果出現(xiàn)除不盡的情況,將導(dǎo)致每個(gè)線程的理論耗時(shí)不一致,如果主觀指定的拆分值不恰當(dāng),可能會(huì)造成很大的時(shí)間偏差,從而達(dá)不到提升任務(wù)處理效率的目的。進(jìn)一步的,通過(guò)人為指定拆分?jǐn)?shù),無(wú)法根據(jù)處理數(shù)據(jù)動(dòng)態(tài)計(jì)算分配。即,指定一個(gè)默認(rèn)值N,無(wú)論傳入的數(shù)組長(zhǎng)度是多少,都用這個(gè)默認(rèn)值去拆分,這樣即沒(méi)有考慮質(zhì)數(shù)和合數(shù)的差異性,也無(wú)法根據(jù)實(shí)際情況進(jìn)行動(dòng)態(tài)調(diào)整。另外,如果指定的默認(rèn)值太小,對(duì)于數(shù)組值比較大的情況,拆分效果并不理想。
[0079]基于上述這些問(wèn)題,本申請(qǐng)實(shí)施例提出了一種采用基于約數(shù)的拆分方法,通過(guò)這種方式對(duì)于合數(shù)可以保證數(shù)組的平均性,通過(guò)算法求解X的約數(shù),并保證X可以被整除,從而實(shí)現(xiàn)數(shù)組拆分的平均性,以盡量保證處理數(shù)組的每個(gè)線程的理論耗時(shí)的一致。
[0080]即使是X為質(zhì)數(shù)的情況,也可以通過(guò)遞減N,使得X成為一個(gè)合數(shù),然后再采用上述基于合數(shù)的拆分方式,進(jìn)行平均拆分。對(duì)于遞減的差值,進(jìn)行另外的處理。通過(guò)本申請(qǐng)中的這種拆分方式是采用最優(yōu)算法計(jì)算得出的,相對(duì)于人為指定具有更高的精確度,同時(shí)也保證了數(shù)組拆分的動(dòng)態(tài)性,對(duì)于比較大的數(shù)值,可以采用較大的約數(shù)進(jìn)行整除拆分以保證任務(wù)執(zhí)行的速度。
[0081]具體的,下面將以數(shù)組作為待處理的任務(wù)為例對(duì)上述方法進(jìn)行說(shuō)明。
[0082]假設(shè)待處理任務(wù)中任務(wù)個(gè)數(shù)為X,在實(shí)際應(yīng)用中,該X的值可能是質(zhì)數(shù)、也可能是合數(shù)。
[0083]I)對(duì)于數(shù)組長(zhǎng)度是合數(shù)的情況,可以通過(guò)計(jì)算得到數(shù)組長(zhǎng)度除了 I和自身之外的其他約數(shù),進(jìn)行平均拆分。以X = 20為例進(jìn)行說(shuō)明,根據(jù)上文的描述可知如果將20分為三個(gè)任務(wù)集合,則對(duì)應(yīng)每個(gè)集合的任務(wù)數(shù)是7,7,6,然而,如果確定20所對(duì)應(yīng)的所有約數(shù),以數(shù)組的方式表示就是[1、2、4、5、10、20]。這時(shí),如果選擇4作為集合的個(gè)數(shù),則其所對(duì)應(yīng)的每個(gè)集合中的任務(wù)個(gè)數(shù)就都是5個(gè)。因此,如果任務(wù)個(gè)數(shù)是一個(gè)合數(shù)的話,則可以先確認(rèn)該合數(shù)所對(duì)應(yīng)的所有約數(shù),然后從其對(duì)應(yīng)的約數(shù)中選取一個(gè)作為集合的個(gè)數(shù),這樣所得到的每個(gè)任務(wù)集合中的任務(wù)個(gè)數(shù)都是相同的,從而可以有效避免現(xiàn)有技術(shù)中因選取的拆分?jǐn)?shù)值不合適而造成的原本可以平均分配的待處理任務(wù)無(wú)法平均分配的技術(shù)問(wèn)題,從而盡可能地保證了被拆分的數(shù)組的平均性,也間接保證了處理數(shù)組的線程在理論耗時(shí)相同。
[0084]2)對(duì)于數(shù)組長(zhǎng)度是質(zhì)數(shù)的情況,由于只有I和自身兩個(gè)約數(shù),無(wú)論是用1,還是自身去拆分,都不合適。比如一個(gè)長(zhǎng)度為43的數(shù)組,43是質(zhì)數(shù),只能被I和43整除,如果拆分成43個(gè)長(zhǎng)度為I的數(shù)組,再通過(guò)多線程去處理,這樣的做法將消耗大量的資源。在本申請(qǐng)實(shí)施例中,例如:當(dāng)待處理任務(wù)中有43個(gè)任務(wù)時(shí),因43是一個(gè)質(zhì)數(shù),只有I和自身兩個(gè)約數(shù),這個(gè)時(shí)候就可以將43減去I得到42,將42作為新的待處理任務(wù)的個(gè)數(shù)進(jìn)行拆分,這樣就可以將其拆分為6個(gè)任務(wù)集合,每個(gè)集合中有7個(gè)任務(wù)或者是拆分為7和任務(wù)集合,每個(gè)集合中有6個(gè)任務(wù)。然后,對(duì)于多出的一個(gè)任務(wù)進(jìn)行單獨(dú)的特殊處理即可。
[0085]下面將基于上述的發(fā)明構(gòu)思給出一個(gè)具體的實(shí)現(xiàn)方式進(jìn)行說(shuō)明,如圖8所示,主要包括以下步驟:
[0086]步驟S802:獲取待處理的數(shù)組或者是List。
[0087]步驟S804:通過(guò)調(diào)用數(shù)組的length屬性,或者List的size方法獲取待拆分的數(shù)組長(zhǎng)度,其中,類(lèi)型為int。如果確定長(zhǎng)度為1,則說(shuō)明當(dāng)前的數(shù)組長(zhǎng)度為1,無(wú)需拆分,也無(wú)需進(jìn)行后續(xù)的步驟。
[0088]步驟S806:計(jì)算數(shù)組長(zhǎng)度的約數(shù)。
[0089]本優(yōu)選實(shí)施例提供了一種方法,將其定義為method,為該method函數(shù)傳入?yún)?shù)為int類(lèi)型的number和int類(lèi)型的dividend。
[0090]傳入獲取的數(shù)組的長(zhǎng)度(length),將其賦值給number變量,傳入拆分參數(shù)dividend (優(yōu)選的,默認(rèn)值等于length)。
[0091]利用求余表達(dá)式%進(jìn)行計(jì)算,即執(zhí)行“l(fā)engths dividend”的操作,如果dividend是length的約數(shù)之一,則確定dividend可以被length整除,因此上述求余表達(dá)式的結(jié)果為零,如果dividend不是length的約數(shù)之一,則求余表達(dá)式的結(jié)果不為零。
[0092]如果傳入的dividend值等于number的值,則dividend必為number的約數(shù)之一,優(yōu)選的,該等于自身的值在本申請(qǐng)無(wú)效,可以將其忽略。當(dāng)dividend不等于number,且通過(guò)求余運(yùn)算得到的計(jì)算結(jié)果為零時(shí),可以用一個(gè)int數(shù)組(記作:int[])記錄所有求余為O的dividend值。[!卩, 對(duì)number的約數(shù)用數(shù)組的形式進(jìn)行記錄。
[0093]dividend遞減(記作:一dividend),判斷遞減后的dividend是否等于I,如果不等于I,則遞歸調(diào)用方法method,遞歸時(shí)傳入數(shù)組長(zhǎng)度,賦給number變量,dividend變量傳入遞減后的值(即上述一dividend的結(jié)果)。
[0094]重復(fù)上述的求余操作,以判斷遞減后的dividend值是否可以被number整除,對(duì)可以整除的數(shù)值進(jìn)行記錄,并繼續(xù)執(zhí)行上述的遞減和求余判斷操作。以此類(lèi)推直至遞減后的值為I為止。
[0095]當(dāng)遞減后的值等于I時(shí),退出方法method,此時(shí)int數(shù)組中就已經(jīng)記錄了當(dāng)前數(shù)組長(zhǎng)度的所有的約數(shù)。
[0096]步驟S808:根據(jù)求約數(shù)的結(jié)果判斷當(dāng)前待拆分?jǐn)?shù)組的長(zhǎng)度是質(zhì)數(shù)還是合數(shù)。
[0097]如果記錄了計(jì)算結(jié)果的數(shù)組,長(zhǎng)度大于0,則當(dāng)前待拆分?jǐn)?shù)組的長(zhǎng)度為合數(shù);
[0098]如果記錄了計(jì)算結(jié)果的數(shù)組,長(zhǎng)度等于0,則當(dāng)前待拆分?jǐn)?shù)組的長(zhǎng)度為質(zhì)數(shù)。
[0099]步驟S810:對(duì)于數(shù)組長(zhǎng)度是合數(shù)的處理。
[0100]對(duì)于待拆分?jǐn)?shù)組長(zhǎng)度是合數(shù)的情況,在返回結(jié)果中選擇某個(gè)約數(shù),對(duì)數(shù)組進(jìn)行整除,并根據(jù)整除結(jié)果,重新拆分?jǐn)?shù)組后,采用多線程進(jìn)行并行處理。
[0101]步驟S812:對(duì)于數(shù)組長(zhǎng)度是質(zhì)數(shù)的處理。
[0102]將當(dāng)前長(zhǎng)度遞減(一length),重復(fù)上述“計(jì)算約數(shù)”的步驟,以獲取遞減后的數(shù)值所對(duì)應(yīng)的約數(shù),遞減計(jì)算出離當(dāng)前待拆分?jǐn)?shù)組長(zhǎng)度最近的一個(gè)合數(shù)M,并利用這個(gè)合數(shù)先將當(dāng)前數(shù)組拆分成兩個(gè)數(shù)組A和B,其中A的長(zhǎng)度等于M,B的長(zhǎng)度等于length-M。數(shù)組A是合數(shù)肯定可以被整除,因此,按照上述對(duì)合數(shù)的處理方式進(jìn)行拆分即可。系統(tǒng)分配線程,處理平均拆分后的數(shù)組A,并分配一個(gè)線程單獨(dú)處理數(shù)組B。
[0103]通過(guò)上述方式完成對(duì)數(shù)組的拆分,對(duì)于長(zhǎng)度是合數(shù)的數(shù)組,可以根據(jù)約數(shù)進(jìn)行平均拆分,對(duì)于長(zhǎng)度是質(zhì)數(shù)的數(shù)組,可以通過(guò)遞減后再進(jìn)行拆分,遞減后再進(jìn)行拆分的方式,在算法上做了優(yōu)化,相對(duì)于人為指定一個(gè)拆分?jǐn)?shù)值更為合理。通過(guò)對(duì)數(shù)據(jù)的平均拆分,使得多個(gè)線程中的每一個(gè)線程的處理速度是均等的,從總體上提高了任務(wù)的處理速度。
[0104]通過(guò)以上的描述可知,本申請(qǐng)具有以下優(yōu)勢(shì):通過(guò)預(yù)先確定待處理任務(wù)中的任務(wù)個(gè)數(shù),并依據(jù)該任務(wù)個(gè)數(shù)確定可以將待處理任務(wù)進(jìn)行平均分配的數(shù)值集合,從該數(shù)值集合中選取一個(gè)數(shù)值對(duì)待處理任務(wù)進(jìn)行拆分,從而解決了現(xiàn)有技術(shù)中任意指定一個(gè)整數(shù)對(duì)待處理任務(wù)進(jìn)行拆分而造成的對(duì)有些可以平均拆分的任務(wù)未被平均拆分而造成的資源浪費(fèi)和任務(wù)執(zhí)行速度降低的技術(shù)問(wèn)題,達(dá)到了提高資源利用率和提高任務(wù)處理速度的技術(shù)效果。[0105]顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本申請(qǐng)的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本申請(qǐng)不限制于任何特定的硬件和軟件結(jié)合。
[0106]以上所述僅為本申請(qǐng)的優(yōu)選實(shí)施例而已,并不用于限制本申請(qǐng),對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種任務(wù)并行處理方法,其特征在于,包括: 確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù); 根據(jù)所述個(gè)數(shù)M判斷所述待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括多個(gè)所述待處理任務(wù)且個(gè)數(shù)相同; 若所述待處理任務(wù)能被分為多個(gè)待處理任務(wù)集合,則根據(jù)所述個(gè)數(shù)M確定多個(gè)能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值; 將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)所述待處理任務(wù),其中,所述N為正整數(shù),且所述N是所述第一數(shù)值中的一個(gè); 對(duì)所述多個(gè)待處理任務(wù)集合中的所述待處理任務(wù)進(jìn)行并行處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在根據(jù)所述個(gè)數(shù)M判斷所述待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合之后,所述方法還包括: 若所述待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合,則根據(jù)M-1或M+1確定能將所述待處理任務(wù)中的M-1或M+1個(gè)任務(wù)分為所述多個(gè)待處理任務(wù)集合的第二數(shù)值; 將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括(M-1) /Q或(M+1) /Q個(gè)所述待處理任務(wù),其中,所述Q為正整數(shù),且所述Q是所述第二數(shù)值中的一個(gè)。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于, 確定所述N的值包括:確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);將所述第一數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述N的值;或者 確定所述Q的值包括:確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù);將所述第二數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述Q的值。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述個(gè)數(shù)M確定多個(gè)能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值包括: 計(jì)算得到所述個(gè)數(shù)M的所有約數(shù); 將所述所有約數(shù)中I和M之外的數(shù)值作為所有能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,對(duì)所述多個(gè)待處理任務(wù)集合中的所述待處理任務(wù)進(jìn)行并行處理包括: 為所述多個(gè)待處理任務(wù)集合分配線程,其中,所述多個(gè)待處理任務(wù)集合中的每一個(gè)對(duì)應(yīng)一個(gè)所述線程,所述線程用于處理所述多個(gè)待處理任務(wù)集合中的每一個(gè)待處理任務(wù)集合中的一個(gè)待處理任務(wù); 并行執(zhí)行所述線程。
6.一種任務(wù)并行處理裝置,其特征在于,包括: 第一確定單元,用于確定待處理任務(wù)的個(gè)數(shù)M,其中,M為正整數(shù); 判斷單元,用于根據(jù)所述個(gè)數(shù)M判斷所述待處理任務(wù)能否被分為多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括多個(gè)所述待處理任務(wù)且個(gè)數(shù)相同; 第二確定單元,用于當(dāng)所述待處理任務(wù)能被分為多個(gè)待處理任務(wù)集合時(shí),根據(jù)所述個(gè)數(shù)M確定多個(gè)能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值; 第一劃分單元,用于將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括M/N個(gè)所述待處理任務(wù),其中,所述N為正整數(shù),且所述N是所述第一數(shù)值中的一個(gè); 處理單元,用于對(duì)所述多個(gè)待處理任務(wù)集合中的所述待處理任務(wù)進(jìn)行并行處理。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,還包括: 第三確定單元,用于在判斷出所述待處理任務(wù)不能被分為多個(gè)待處理任務(wù)集合時(shí),根據(jù)M-1或M+1確定能將所述待處理任務(wù)中的M-1或M+1個(gè)任務(wù)分為所述多個(gè)待處理任務(wù)集合的第二數(shù)值; 第二劃分單元,用于將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合,其中,每個(gè)待處理任務(wù)集合包括(M-l)/Q或(M+l)/Q個(gè)所述待處理任務(wù),其中,所述Q為正整數(shù),且所述Q是所述第二數(shù)值中的一個(gè)。
8.根據(jù)權(quán)利要求6或7所述的方法,其特征在于,還包括: 第一確定模塊,用于確定系統(tǒng)當(dāng)前允許并行處理的線程的個(gè)數(shù); 第二確定模塊,用于將所述第一數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述N的值;或者 第三確定模塊,用于將所述第一數(shù)值中與所述線程的個(gè)數(shù)最接近,且小于所述線程的個(gè)數(shù)的數(shù)值作為所述Q的值。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述第二確定單元包括: 獲取單元,用于獲取所述個(gè)數(shù)M的所有約數(shù); 第三確定單元,用于將所述所有約數(shù)中I和M之外的數(shù)值作為所有能將所述待處理任務(wù)分為所述多個(gè)待處理任務(wù)集合的第一數(shù)值; 存儲(chǔ)單元,用于將所述第一數(shù)值用數(shù)組的形式進(jìn)行存儲(chǔ)。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述處理單元包括: 分配模塊,用于為所述多個(gè)待處理任務(wù)集合分配線程,其中,所述多個(gè)待處理任務(wù)集合中的每一個(gè)對(duì)應(yīng)一個(gè)所述線程,所述線程用于處理所述多個(gè)待處理任務(wù)集合中的每一個(gè)待處理任務(wù)集合中的一個(gè)待處理任務(wù); 執(zhí)行模塊,用于并行執(zhí)行所述線程。
【文檔編號(hào)】G06F9/38GK103677751SQ201210328743
【公開(kāi)日】2014年3月26日 申請(qǐng)日期:2012年9月6日 優(yōu)先權(quán)日:2012年9月6日
【發(fā)明者】戴鍵陽(yáng) 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司