一种基于多线程的文件上传系统及方法
【专利摘要】本发明公开了一种基于多线程的文件上传系统及方法,其中,所述方法包括:首先,获取客户机的配置参数,同时获取用户选择需要上传的文件个数filecount;然后,根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数n;最后,把准备上传的文件按文件大小均衡的原则分配给n个线程,n个线程同时工作,直至完成上传。其提高大批量小文件(例如word、txt、裕邦文件、excel等办公文件)的上传效率;并且,在上传过程中,通过对大批量的小文件进行分组(分组原则为每一组文件大小的差值最小最均衡)并通过多个线程上传,实现充分利用上传带宽的效果。
【专利说明】一种基于多线程的文件上传系统及方法
【技术领域】
[0001]本发明涉及大批量小文件上传领域,特别涉及一种基于多线程的文件上传系统及方法。
【背景技术】
[0002]在现有技术中,大批量的文件上传会采用多线程技术提高效率,但是在分配线程数额时多采用一刀切模式,即忽视本地电脑硬件的配置情况而只分配固定的线程数。这就造成两个问题:1、硬件配置好的电脑分配的线程不够使得硬件机能没有得到充分应用从而影响上传效率;2、硬件配置低的电脑分配的线程过多造成电脑出现卡机同样影响了文件上传效率。
[0003]有鉴于此,现有技术有待改进和提高。
【发明内容】
[0004]鉴于上述现有技术的不足之处,本发明的目的在于提供一种基于多线程的文件上传系统及方法,从而解决现有技术在大批量小文件上传过程中,不考虑硬件本身而直接采取多线程将可能出现卡机等情况,甚至影响系统性能的问题。
[0005]为了达到上述目的,本发明采取了以下技术方案:
一种基于多线程 的文件上传的方法,其中,所述方法包括以下步骤:S1、获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount:
52、获取用户选择需要上传的文件个数filecount;
53、根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η ;
54、把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。
[0006]所述的基于多线程的文件上传的方法,其中,所述步骤SI中通过读取注册表获取本机CPU的名称和频率,通过Windows API GetSystemInfo获取CPU个数cpucount以及CPU型号。
[0007]所述的基于多线程的文件上传的方法,其中,所述步骤S3中按照预定规则确定所需建立的线程个数η具体包括:
若 filecount ^ ( 2*cpucount + 2 ),则 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),则 η = filecount。
[0008]所述的基于多线程的文件上传的方法,其中,所述步骤S4中把准备上传的文件按文件大小均衡的原则分配给η个线程具体包括:
541、先按文件大小做升序排列;
542、把前面η个文件分别分配给η个线程;
543、然后从文件序列的最后一个开始,把文件依次分配给当前线程文件中大小最小的一个线程。
[0009]所述的基于多线程的文件上传的方法,其中,所述步骤S43具体包括以下步骤:
5431、比较当前线程所含文件体积的大小,然后,将剩余的文件依次分配给当前线程所含文件体积中体积最小的一个线程;
5432、重复上述步骤直至将所有文件分配完成。
[0010]所述的基于多线程的文件上传的方法,其中,所述步骤S43具体包括以下步骤: S431*、根据所含文件总体积大小对线程由小到大进行升序排序;
S432*、将剩余的文件依次分配给按序排列的线程;
S433*、剩余的文件数量小于线程数,则步骤完毕;剩余的文件数量大于线程数,则重复上述步骤直至将所有文件分配完成。
[0011]一种基于多线程的文件上传的系统,其中,所述系统包括:第一获取单元,用于获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount:
第二获取单元,用于获取用户选择需要上传的文件个数filecount ;
确定单元,用于根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η ;
上传单元,用于把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。
[0012]所述的基于多线程的文件上传的系统,其中,所述第一获取单元中通过读取注册表获取本机CPU的名称和频率,通过Windows API GetSystemInfo获取CPU个数cpucount以及CPU型号。
[0013]所述的基于多线程的文件上传的系统,其中,所述上传单元中把准备上传的文件按文件大小均衡的原则分配给η个线程具体包括:
排列子单元,用于先按文件大小做升序排列;
第一分配子单元,用于把前面η个文件分别分配给η个线程;
第二分配子单元,用于然后从文件序列的最后一个开始,把文件依次分配给当前线程文件中大小最小的一个线程。
[0014]所述的基于多线程的文件上传的系统,其中,所述确定单元中按照预定规则确定所需建立的线程个数η具体包括:
若 filecount ^ ( 2*cpucount + 2 ),则 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),则 η = filecount。
[0015]相较于现有技术,本发明提供的基于多线程的文件上传系统及方法具有以下优
占-
^ \\\.(1)通过注册表和操作系统自带接口读取CPU核心来分配线程数额,提高大批量小文件(例如word、txt、裕邦文件、excel等办公文件)的上传效率;
(2)在上传过程中,通过对大批量的小文件进行分组(分组原则为每一组文件大小的差值最小最均衡)并通过多个线程上传,实现充分利用上传带宽的效果。
【专利附图】
【附图说明】
[0016]图1为本发明的基于多线程的文件上传方法的流程图。[0017]图2为本发明的基于多线程的文件上传系统的结构框图。
【具体实施方式】
[0018]本发明提供一种基于多线程的文件上传系统及方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0019]请参阅图1,其为本发明的基于多线程的文件上传方法的流程图。如图所示,所述基于多线程的文件上传的方法包括以下步骤:S1、获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount:
S2、获取用户选择需要上传的文件个数filecount;
S3、根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η ;
S4、把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。
[0020]下面分别针对上述步骤进行详细描述。
[0021]所述步骤SI为获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount ο具体来说,通过注册表和操作系统自带接口读取CPU核心来分配线程数额,提高大批量小文件(例如word、txt、裕邦文件、excel等办公文件)的上传效率。在本发明实施例中,通过读取注册表获取本机CPU的名称和频率,通过Windows API GetSystemInfo获取CPU个数cpucount以及CPU型号。这是本发明的关键所在:创造性的根据CPU实际参数来自动配置多线程上传的数目,即能够保证用户机的运行效率,又最大限度的利用系统资源完成快速上传。
[0022]所述步骤S2为获取用户选择需要上传的文件个数filecount。
[0023]所述步骤S3为根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η。即根据数cpucount、filecount两个数值,按照预先设定的规则来确定所需建立的线程个数η。与现有技术不同的是,在确定所需建立的线程个数η时,除了考虑到文件个数filecount之外,我们创造性地引入CPU核心个数这一参数,来确定所需建立的线程个数 η。即 n=f (cpucount, filecount)。
[0024]在本实施例中,我们根据下述公式来确定线程个数η:
若 filecount ^ ( 2*cpucount + 2 ),则 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),则 η = filecount。
[0025]所述步骤S4为把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。相对应的,本发明在上传过程中,通过对大批量的小文件进行分组(分组原则为每一组文件大小的差值最小最均衡)并通过多个线程上传,实现充分利用上传带宽的效果。
[0026]进一步地,所述步骤S4中把准备上传的文件按文件大小均衡的原则分配给η个线程具体包括:
541、先按文件大小做升序排列;
542、把前面η个文件分别分配给η个线程; S43、然后从文件序列的最后一个开始,把文件依次分配给当前线程所含文件体积中体积最小的一个线程。
[0027]举例来说,如一共有10份文件,四个线程:A线程、B线程、C线程、D线程。则首先
将10个文件按照升序进行排列:文件1、文件2、文件3......文件10,其中,文件I体积最小,
文件10体积最大。再将体积最小的文件I放入A线程,文件2放入B线程,文件3放入C线程,文件4放入D线程。此时,根据所含文件总体积大小对线程进行升序排序:A线程、B线程、C线程、D线程。其中,A线程所含文件I体积最小,D线程所含文件4体积最大。然后将剩下的文件排序最末的文件10放入A线程,文件9放入B线程,文件8放入C线程,文件7放入D线程。此时,再根据所含文件总体积大小对线程进行升序排序,并不断重复上述过程,直到所有文件都放入线程中为止。
[0028]需要注意的是,将文件依据该规则分别放入线程之前已经进行编组,所以之后进入线程是没有对比大小这个动作而是无停顿地进入线程内的。
[0029]同时,也可以在进入线程的同时对文件进行编组。
[0030]进一步地,所述的基于多线程的文件上传的方法中,所述步骤S43还可以包括以下步骤:
S431*、根据所含文件总体积大小对线程由小到大进行升序排序;即先计算线程中所含文件总体积大小,然后由小到大进行升序排序;
S432*、将剩余的文件依次分配给按序排列的线程;即将剩余文件中体积最小的放在所含文件总体积最小的线程中,再将次小的文件放入所含文件总体积次小的线程中,以此类推;
S433*、剩余的文件数量小于线程数,则步骤完毕;剩余的文件数量大于线程数,则重复上述步骤直至将所有文件分配完成。
[0031]本发明既提高了运行效率,又提高了资源使用效率来提高系统的效率,实现了大批量小文件上传效率与稳定兼具,克服了现有技术的不足。
[0032]本发明还提供了一种基于多线程的文件上传的系统,如图2所示,所述系统包括:第一获取单元100,用于获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount:
第二获取单元200,用于获取用户选择需要上传的文件个数filecount ;
确定单元300,用于根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η;
上传单元400,用于把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。
[0033]进一步地,所述的基于多线程的文件上传的系统中,所述第一获取单元中通过读取注册表获取本机CPU的名称和频率,通过Windows API GetSystemInfo获取CPU个数cpucount以及CPU型号。
[0034]进一步地,所述的基于多线程的文件上传的系统中,所述上传单元中把准备上传的文件按文件大小均衡的原则分配给η个线程具体包括:
排列子单元,用于先按文件大小做升序排列;
第一分配子单元,用于把前面η个文件分别分配给η个线程;第二分配子单元,用于然后从文件序列的最后一个开始,把文件依次分配给当前线程所含文件体积中体积最小的一个线程。
[0035]进一步地,所述的基于多线程的文件上传的系统中,所述确定单元中按照预定规则确定所需建立的线程个数η具体包括:
若 filecount ^ ( 2*cpucount + 2 ),则 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),则 η = filecount。
[0036]上述各个部分的功能都已经在上述方法中进行了详细介绍,这里就不再冗述了。
[0037]综上所述,本发明公开的基于多线程的文件上传系统及方法,其中,所述方法包括:首先,获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount:同时,获取用户选择需要上传的文件个数filecount ;然后,根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η;最后,把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。其通过注册表和操作系统自带接口读取CPU核心来分配线程数额,提高大批量小文件(例如word、txt、裕邦文件、excel等办公文件)的上传效率;并且,在上传过程中,通过对大批量的小文件进行分组(分组原则为每一组文件大小的差值最小最均衡)并通过多个线程上传,实现充分利用上传带宽的效果。
[0038]可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替 换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
【权利要求】
1.一种基于多线程的文件上传的方法,其特征在于,所述方法包括以下步骤:S1、获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount: 52、获取用户选择需要上传的文件个数fiIecount; 53、根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η ; 54、把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。
2.根据权利要求1所述的基于多线程的文件上传的方法,其特征在于,所述步骤SI中通过读取注册表获取本机CPU的名称和频率,通过Windows API GetSystemInfo获取CPU个数cpucount以及CPU型号。
3.根据权利要求1所述的基于多线程的文件上传的方法,其特征在于,所述步骤S3中按照预定规则确定所需建立的线程个数η具体包括:
若 filecount ^ ( 2*cpucount + 2 ),则 n = 2*cpucount + 2 ; 若 filecount < ( 2氺cpucount + 2 ),则 η = filecount。
4.根据权利要求1所述的基于多线程的文件上传的方法,其特征在于,所述步骤S4中把准备上传的文件按文件大小均衡的原则分配给η个线程具体包括: 541、先按文件大小做升序排列; 542、把前面η个文件分别分配给η个线程; 543、然后从文件序列的最后一个开始,把文件依次分配给当前线程所含文件体积中体积最小的一个线程。
5.根据权利要求4所述的基于多线程的文件上传的方法,其特征在于,所述步骤S43具体包括以下步骤: 5431、比较当前线程所含文件体积的大小,然后,将剩余的文件依次分配给当前线程所含文件体积中体积最小的一个线程; 5432、重复上述步骤直至将所有文件分配完成。
6.根据权利要求4所述的基于多线程的文件上传的方法,其特征在于,所述步骤S43具体包括以下步骤: S431*、根据所含文件总体积大小对线程由小到大进行升序排序; S432*、将剩余的文件依次分配给按序排列的线程; S433*、剩余的文件数量小于线程数,则步骤完毕;剩余的文件数量大于线程数,则重复上述步骤直至将所有文件分配完成。
7.一种基于多线程的文件上传的系统,其特征在于,所述系统包括:第一获取单元,用于获取客户机的配置参数,其中,所述配置参数包括CPU个数cpucount: 第二获取单元,用于获取用户选择需要上传的文件个数filecount ; 确定单元,用于根据CPU个数cpucount和文件个数filecount,按照预定规则确定所需建立的线程个数η ; 上传单元,用于把准备上传的文件按文件大小均衡的原则分配给η个线程,η个线程同时工作,直至完成上传。
8.根据权利要求7所述的基于多线程的文件上传的系统,其特征在于,所述第一获取单元中通过读取注册表获取本机CPU的名称和频率,通过Windows API GetSystemInfo获取CPU个数cpucount以及CPU型号。
9.根据权利要求7所述的基于多线程的文件上传的系统,其特征在于,所述上传单元中把准备上传的文件按文件大小均衡的原则分配给η个线程具体包括: 排列子单元,用于先按文件大小做升序排列; 第一分配子单元,用于把前面η个文件分别分配给η个线程; 第二分配子单元,用于然后从文件序列的最后一个开始,把文件依次分配给当前线程所含文件体积中体积最小的一个线程。
10.根据权利要求7所述的基于多线程的文件上传的系统,其特征在于,所述确定单元中按照预定规则确定所需建立的线程个数η具体包括:
若 filecount≥ ( 2*cpucount + 2 ),则 n = 2*cpucount + 2 ;
若 filecount < ( 2氺cpucount + 2 ),则 η = filecount。
【文档编号】H04L29/08GK103841196SQ201410082305
【公开日】2014年6月4日 申请日期:2014年3月7日 优先权日:2014年3月7日
【发明者】谭曼 申请人:长沙裕邦软件开发有限公司