一種基于多線程的文件上傳系統(tǒng)及方法
【專利摘要】本發(fā)明公開了一種基于多線程的文件上傳系統(tǒng)及方法,其中,所述方法包括:首先,獲取客戶機(jī)的配置參數(shù),同時(shí)獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount;然后,根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)n;最后,把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給n個(gè)線程,n個(gè)線程同時(shí)工作,直至完成上傳。其提高大批量小文件(例如word、txt、裕邦文件、excel等辦公文件)的上傳效率;并且,在上傳過程中,通過對大批量的小文件進(jìn)行分組(分組原則為每一組文件大小的差值最小最均衡)并通過多個(gè)線程上傳,實(shí)現(xiàn)充分利用上傳帶寬的效果。
【專利說明】一種基于多線程的文件上傳系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及大批量小文件上傳領(lǐng)域,特別涉及一種基于多線程的文件上傳系統(tǒng)及方法。
【背景技術(shù)】
[0002]在現(xiàn)有技術(shù)中,大批量的文件上傳會(huì)采用多線程技術(shù)提高效率,但是在分配線程數(shù)額時(shí)多采用一刀切模式,即忽視本地電腦硬件的配置情況而只分配固定的線程數(shù)。這就造成兩個(gè)問題:1、硬件配置好的電腦分配的線程不夠使得硬件機(jī)能沒有得到充分應(yīng)用從而影響上傳效率;2、硬件配置低的電腦分配的線程過多造成電腦出現(xiàn)卡機(jī)同樣影響了文件上傳效率。
[0003]有鑒于此,現(xiàn)有技術(shù)有待改進(jìn)和提高。
【發(fā)明內(nèi)容】
[0004]鑒于上述現(xiàn)有技術(shù)的不足之處,本發(fā)明的目的在于提供一種基于多線程的文件上傳系統(tǒng)及方法,從而解決現(xiàn)有技術(shù)在大批量小文件上傳過程中,不考慮硬件本身而直接采取多線程將可能出現(xiàn)卡機(jī)等情況,甚至影響系統(tǒng)性能的問題。
[0005]為了達(dá)到上述目的,本發(fā)明采取了以下技術(shù)方案:
一種基于多線程 的文件上傳的方法,其中,所述方法包括以下步驟:S1、獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount:
52、獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount;
53、根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η ;
54、把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。
[0006]所述的基于多線程的文件上傳的方法,其中,所述步驟SI中通過讀取注冊表獲取本機(jī)CPU的名稱和頻率,通過Windows API GetSystemInfo獲取CPU個(gè)數(shù)cpucount以及CPU型號(hào)。
[0007]所述的基于多線程的文件上傳的方法,其中,所述步驟S3中按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η具體包括:
若 filecount ^ ( 2*cpucount + 2 ),則 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),則 η = filecount。
[0008]所述的基于多線程的文件上傳的方法,其中,所述步驟S4中把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程具體包括:
541、先按文件大小做升序排列;
542、把前面η個(gè)文件分別分配給η個(gè)線程;
543、然后從文件序列的最后一個(gè)開始,把文件依次分配給當(dāng)前線程文件中大小最小的一個(gè)線程。
[0009]所述的基于多線程的文件上傳的方法,其中,所述步驟S43具體包括以下步驟:
5431、比較當(dāng)前線程所含文件體積的大小,然后,將剩余的文件依次分配給當(dāng)前線程所含文件體積中體積最小的一個(gè)線程;
5432、重復(fù)上述步驟直至將所有文件分配完成。
[0010]所述的基于多線程的文件上傳的方法,其中,所述步驟S43具體包括以下步驟: S431*、根據(jù)所含文件總體積大小對線程由小到大進(jìn)行升序排序;
S432*、將剩余的文件依次分配給按序排列的線程;
S433*、剩余的文件數(shù)量小于線程數(shù),則步驟完畢;剩余的文件數(shù)量大于線程數(shù),則重復(fù)上述步驟直至將所有文件分配完成。
[0011]一種基于多線程的文件上傳的系統(tǒng),其中,所述系統(tǒng)包括:第一獲取單元,用于獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount:
第二獲取單元,用于獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount ;
確定單元,用于根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η ;
上傳單元,用于把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。
[0012]所述的基于多線程的文件上傳的系統(tǒng),其中,所述第一獲取單元中通過讀取注冊表獲取本機(jī)CPU的名稱和頻率,通過Windows API GetSystemInfo獲取CPU個(gè)數(shù)cpucount以及CPU型號(hào)。
[0013]所述的基于多線程的文件上傳的系統(tǒng),其中,所述上傳單元中把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程具體包括:
排列子單元,用于先按文件大小做升序排列;
第一分配子單元,用于把前面η個(gè)文件分別分配給η個(gè)線程;
第二分配子單元,用于然后從文件序列的最后一個(gè)開始,把文件依次分配給當(dāng)前線程文件中大小最小的一個(gè)線程。
[0014]所述的基于多線程的文件上傳的系統(tǒng),其中,所述確定單元中按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η具體包括:
若 filecount ^ ( 2*cpucount + 2 ),則 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),則 η = filecount。
[0015]相較于現(xiàn)有技術(shù),本發(fā)明提供的基于多線程的文件上傳系統(tǒng)及方法具有以下優(yōu)
占-
^ \\\.(1)通過注冊表和操作系統(tǒng)自帶接口讀取CPU核心來分配線程數(shù)額,提高大批量小文件(例如word、txt、裕邦文件、excel等辦公文件)的上傳效率;
(2)在上傳過程中,通過對大批量的小文件進(jìn)行分組(分組原則為每一組文件大小的差值最小最均衡)并通過多個(gè)線程上傳,實(shí)現(xiàn)充分利用上傳帶寬的效果。
【專利附圖】
【附圖說明】
[0016]圖1為本發(fā)明的基于多線程的文件上傳方法的流程圖。[0017]圖2為本發(fā)明的基于多線程的文件上傳系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0018]本發(fā)明提供一種基于多線程的文件上傳系統(tǒng)及方法,為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下參照附圖并舉實(shí)施例對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0019]請參閱圖1,其為本發(fā)明的基于多線程的文件上傳方法的流程圖。如圖所示,所述基于多線程的文件上傳的方法包括以下步驟:S1、獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount:
S2、獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount;
S3、根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η ;
S4、把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。
[0020]下面分別針對上述步驟進(jìn)行詳細(xì)描述。
[0021]所述步驟SI為獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount ο具體來說,通過注冊表和操作系統(tǒng)自帶接口讀取CPU核心來分配線程數(shù)額,提高大批量小文件(例如word、txt、裕邦文件、excel等辦公文件)的上傳效率。在本發(fā)明實(shí)施例中,通過讀取注冊表獲取本機(jī)CPU的名稱和頻率,通過Windows API GetSystemInfo獲取CPU個(gè)數(shù)cpucount以及CPU型號(hào)。這是本發(fā)明的關(guān)鍵所在:創(chuàng)造性的根據(jù)CPU實(shí)際參數(shù)來自動(dòng)配置多線程上傳的數(shù)目,即能夠保證用戶機(jī)的運(yùn)行效率,又最大限度的利用系統(tǒng)資源完成快速上傳。
[0022]所述步驟S2為獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount。
[0023]所述步驟S3為根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η。即根據(jù)數(shù)cpucount、filecount兩個(gè)數(shù)值,按照預(yù)先設(shè)定的規(guī)則來確定所需建立的線程個(gè)數(shù)η。與現(xiàn)有技術(shù)不同的是,在確定所需建立的線程個(gè)數(shù)η時(shí),除了考慮到文件個(gè)數(shù)filecount之外,我們創(chuàng)造性地引入CPU核心個(gè)數(shù)這一參數(shù),來確定所需建立的線程個(gè)數(shù) η。即 n=f (cpucount, filecount)。
[0024]在本實(shí)施例中,我們根據(jù)下述公式來確定線程個(gè)數(shù)η:
若 filecount ^ ( 2*cpucount + 2 ),則 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),則 η = filecount。
[0025]所述步驟S4為把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。相對應(yīng)的,本發(fā)明在上傳過程中,通過對大批量的小文件進(jìn)行分組(分組原則為每一組文件大小的差值最小最均衡)并通過多個(gè)線程上傳,實(shí)現(xiàn)充分利用上傳帶寬的效果。
[0026]進(jìn)一步地,所述步驟S4中把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程具體包括:
541、先按文件大小做升序排列;
542、把前面η個(gè)文件分別分配給η個(gè)線程; S43、然后從文件序列的最后一個(gè)開始,把文件依次分配給當(dāng)前線程所含文件體積中體積最小的一個(gè)線程。
[0027]舉例來說,如一共有10份文件,四個(gè)線程:A線程、B線程、C線程、D線程。則首先
將10個(gè)文件按照升序進(jìn)行排列:文件1、文件2、文件3......文件10,其中,文件I體積最小,
文件10體積最大。再將體積最小的文件I放入A線程,文件2放入B線程,文件3放入C線程,文件4放入D線程。此時(shí),根據(jù)所含文件總體積大小對線程進(jìn)行升序排序:A線程、B線程、C線程、D線程。其中,A線程所含文件I體積最小,D線程所含文件4體積最大。然后將剩下的文件排序最末的文件10放入A線程,文件9放入B線程,文件8放入C線程,文件7放入D線程。此時(shí),再根據(jù)所含文件總體積大小對線程進(jìn)行升序排序,并不斷重復(fù)上述過程,直到所有文件都放入線程中為止。
[0028]需要注意的是,將文件依據(jù)該規(guī)則分別放入線程之前已經(jīng)進(jìn)行編組,所以之后進(jìn)入線程是沒有對比大小這個(gè)動(dòng)作而是無停頓地進(jìn)入線程內(nèi)的。
[0029]同時(shí),也可以在進(jìn)入線程的同時(shí)對文件進(jìn)行編組。
[0030]進(jìn)一步地,所述的基于多線程的文件上傳的方法中,所述步驟S43還可以包括以下步驟:
S431*、根據(jù)所含文件總體積大小對線程由小到大進(jìn)行升序排序;即先計(jì)算線程中所含文件總體積大小,然后由小到大進(jìn)行升序排序;
S432*、將剩余的文件依次分配給按序排列的線程;即將剩余文件中體積最小的放在所含文件總體積最小的線程中,再將次小的文件放入所含文件總體積次小的線程中,以此類推;
S433*、剩余的文件數(shù)量小于線程數(shù),則步驟完畢;剩余的文件數(shù)量大于線程數(shù),則重復(fù)上述步驟直至將所有文件分配完成。
[0031]本發(fā)明既提高了運(yùn)行效率,又提高了資源使用效率來提高系統(tǒng)的效率,實(shí)現(xiàn)了大批量小文件上傳效率與穩(wěn)定兼具,克服了現(xiàn)有技術(shù)的不足。
[0032]本發(fā)明還提供了一種基于多線程的文件上傳的系統(tǒng),如圖2所示,所述系統(tǒng)包括:第一獲取單元100,用于獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount:
第二獲取單元200,用于獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount ;
確定單元300,用于根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η;
上傳單元400,用于把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。
[0033]進(jìn)一步地,所述的基于多線程的文件上傳的系統(tǒng)中,所述第一獲取單元中通過讀取注冊表獲取本機(jī)CPU的名稱和頻率,通過Windows API GetSystemInfo獲取CPU個(gè)數(shù)cpucount以及CPU型號(hào)。
[0034]進(jìn)一步地,所述的基于多線程的文件上傳的系統(tǒng)中,所述上傳單元中把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程具體包括:
排列子單元,用于先按文件大小做升序排列;
第一分配子單元,用于把前面η個(gè)文件分別分配給η個(gè)線程;第二分配子單元,用于然后從文件序列的最后一個(gè)開始,把文件依次分配給當(dāng)前線程所含文件體積中體積最小的一個(gè)線程。
[0035]進(jìn)一步地,所述的基于多線程的文件上傳的系統(tǒng)中,所述確定單元中按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η具體包括:
若 filecount ^ ( 2*cpucount + 2 ),則 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),則 η = filecount。
[0036]上述各個(gè)部分的功能都已經(jīng)在上述方法中進(jìn)行了詳細(xì)介紹,這里就不再冗述了。
[0037]綜上所述,本發(fā)明公開的基于多線程的文件上傳系統(tǒng)及方法,其中,所述方法包括:首先,獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount:同時(shí),獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount ;然后,根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η;最后,把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。其通過注冊表和操作系統(tǒng)自帶接口讀取CPU核心來分配線程數(shù)額,提高大批量小文件(例如word、txt、裕邦文件、excel等辦公文件)的上傳效率;并且,在上傳過程中,通過對大批量的小文件進(jìn)行分組(分組原則為每一組文件大小的差值最小最均衡)并通過多個(gè)線程上傳,實(shí)現(xiàn)充分利用上傳帶寬的效果。
[0038]可以理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)本發(fā)明的技術(shù)方案及其發(fā)明構(gòu)思加以等同替 換或改變,而所有這些改變或替換都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種基于多線程的文件上傳的方法,其特征在于,所述方法包括以下步驟:S1、獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount: 52、獲取用戶選擇需要上傳的文件個(gè)數(shù)fiIecount; 53、根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η ; 54、把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。
2.根據(jù)權(quán)利要求1所述的基于多線程的文件上傳的方法,其特征在于,所述步驟SI中通過讀取注冊表獲取本機(jī)CPU的名稱和頻率,通過Windows API GetSystemInfo獲取CPU個(gè)數(shù)cpucount以及CPU型號(hào)。
3.根據(jù)權(quán)利要求1所述的基于多線程的文件上傳的方法,其特征在于,所述步驟S3中按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η具體包括:
若 filecount ^ ( 2*cpucount + 2 ),則 n = 2*cpucount + 2 ; 若 filecount < ( 2氺cpucount + 2 ),則 η = filecount。
4.根據(jù)權(quán)利要求1所述的基于多線程的文件上傳的方法,其特征在于,所述步驟S4中把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程具體包括: 541、先按文件大小做升序排列; 542、把前面η個(gè)文件分別分配給η個(gè)線程; 543、然后從文件序列的最后一個(gè)開始,把文件依次分配給當(dāng)前線程所含文件體積中體積最小的一個(gè)線程。
5.根據(jù)權(quán)利要求4所述的基于多線程的文件上傳的方法,其特征在于,所述步驟S43具體包括以下步驟: 5431、比較當(dāng)前線程所含文件體積的大小,然后,將剩余的文件依次分配給當(dāng)前線程所含文件體積中體積最小的一個(gè)線程; 5432、重復(fù)上述步驟直至將所有文件分配完成。
6.根據(jù)權(quán)利要求4所述的基于多線程的文件上傳的方法,其特征在于,所述步驟S43具體包括以下步驟: S431*、根據(jù)所含文件總體積大小對線程由小到大進(jìn)行升序排序; S432*、將剩余的文件依次分配給按序排列的線程; S433*、剩余的文件數(shù)量小于線程數(shù),則步驟完畢;剩余的文件數(shù)量大于線程數(shù),則重復(fù)上述步驟直至將所有文件分配完成。
7.一種基于多線程的文件上傳的系統(tǒng),其特征在于,所述系統(tǒng)包括:第一獲取單元,用于獲取客戶機(jī)的配置參數(shù),其中,所述配置參數(shù)包括CPU個(gè)數(shù)cpucount: 第二獲取單元,用于獲取用戶選擇需要上傳的文件個(gè)數(shù)filecount ; 確定單元,用于根據(jù)CPU個(gè)數(shù)cpucount和文件個(gè)數(shù)filecount,按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η ; 上傳單元,用于把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程,η個(gè)線程同時(shí)工作,直至完成上傳。
8.根據(jù)權(quán)利要求7所述的基于多線程的文件上傳的系統(tǒng),其特征在于,所述第一獲取單元中通過讀取注冊表獲取本機(jī)CPU的名稱和頻率,通過Windows API GetSystemInfo獲取CPU個(gè)數(shù)cpucount以及CPU型號(hào)。
9.根據(jù)權(quán)利要求7所述的基于多線程的文件上傳的系統(tǒng),其特征在于,所述上傳單元中把準(zhǔn)備上傳的文件按文件大小均衡的原則分配給η個(gè)線程具體包括: 排列子單元,用于先按文件大小做升序排列; 第一分配子單元,用于把前面η個(gè)文件分別分配給η個(gè)線程; 第二分配子單元,用于然后從文件序列的最后一個(gè)開始,把文件依次分配給當(dāng)前線程所含文件體積中體積最小的一個(gè)線程。
10.根據(jù)權(quán)利要求7所述的基于多線程的文件上傳的系統(tǒng),其特征在于,所述確定單元中按照預(yù)定規(guī)則確定所需建立的線程個(gè)數(shù)η具體包括:
若 filecount≥ ( 2*cpucount + 2 ),則 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),則 η = filecount。
【文檔編號(hào)】H04L29/08GK103841196SQ201410082305
【公開日】2014年6月4日 申請日期:2014年3月7日 優(yōu)先權(quán)日:2014年3月7日
【發(fā)明者】譚曼 申請人:長沙裕邦軟件開發(fā)有限公司