一种海量数据多线程并行处理中的负载均衡方法

文档序号:6375968阅读:821来源:国知局
专利名称:一种海量数据多线程并行处理中的负载均衡方法
技术领域
本发明涉及海量数据的多线程并行处理,尤其涉及一种海量数据多线程并行处理中的负载均衡方法,属于计算机网络技术领域。
背景技术
在大规模部署的终端设备接入 与海量数据并发处理系统中,系统单位时间内接收处理数据量非常大,系统接收后马上产生一个新的线程,对接收的数据进行处理这种方法,系统并发性效率将会显著降低,这是由于创建线程需要较多系统开销、同时频繁分配、释放系统资源也要花费较多时间,为了尽力减少系统不必要的开销以及计算时间,提高系统并行处理能力,一般采用多线程、线程池的方式进行,通过接收与处理分离的,采用FIFO方式处理数据,也就是先到达的数据先处理。系统接收数据后,如果随机或简单地对接收数据进行分配,由于线程对计算机时间片的分配以及数据内容的不同,每个数据处理的时间将不一致,随机分配将会造成数据处理线程池有的线程空闲,有的线程数据区中排放大量待处理数据,严重影响系统的性能,影响系统并发处理能力。

发明内容
本发明所要解决的技术问题在于提供一种海量数据多线程并行处理中的负载均衡方法,能够将数据优先分配至当前比较空闲的数据处理线程进行处理,从而显著提高大规模部署的终端设备接入能力与海量数据的并行处理、密集计算的能力。本发明具体采用以下技术方案
一种海量数据多线程并行处理中的负载均衡方法,服务端利用多个并行的数据处理线程对接收到的数据进行处理,对于每一个新接收到的数据包,服务端按照以下方法为其分配数据处理线程
判断是否存在当前待处理数据包个数C为O或者已处理数据包个数/7为O的数据处理线程,如是,则将新收到的数据包分配给其中任意一个数据处理线程;如否,则将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算
M=-^-
CK
式中,μ为相对空闲率;e为该数据处理线程当前待处理数据包个数;K为该数据处理线程在处理个数据包后的数据处理效率,其表达式为如下
上学塊-O
Vn= On=Q其中,/7为已处理数据包个数,k为该数据处理线程处理第个数据包所耗费时间。本发明的线程空闲率由两个因数决定线程中排队待处理的数据包数以及线程处理数据的效率。通过线程对已处理数 据包的时间进行线性平均得到当前线程的数据处理效率,线程中排队待处理的数据包与线程处理效率值的乘积,预测了后续当前线程还要花费多长时间处理完线程中待处理的数据包,这个处理时间越短,则表示后续放入该线程的数据将被更优先处理。同时,该算法计算简单,基本不耗费计算机资源,执行算法的时间只有千分之一微秒不到,即使海量数据分析处理的情况下,对系统性能、资源的影响也可以忽略。因此,该算法具有很强的实际应用价值。本发明的负载均衡方法根据每个数据处理线程的待处理数据包个数和数据处理效率计算其相对空闲率,并根据相对空闲率对每个数据处理线程进行合理数据分配,能够显著提高系统对海量数据的并行处理、密集计算的能力。


图I为服务端多线程并行数据处理的原理示意 图2为服务端多线程并行数据处理的流程示意图。
具体实施例方式下面结合附图对本发明的技术方案进行详细说明
本发明的思路是在对多线程并行处理的数据进行分配时,根据各数据处理线程的相对空闲率来对每个数据处理线程进行合理数据分配,从而提高系统对海量数据的并行处理、密集计算的能力。图I显示了一个服务端多线程并行数据处理的实例,在该实例中,服务端在进程启动时,开启一个数据接收线程R,并创建包含多个数据处理线程D的线程池,以及一个数据分发线程S,同时开辟一段动态存储区BM,并为线程池中的每一个数据处理线程D开辟一个动态存储区SM和一个初始值为O的计数器C ;数据接收线程R只负责接收数据包并将其存入动态存储区BM ;数据分发线程S循环读取动态存储区BM中的数据包,并根据线程池中各数据处理线程的相对空闲率将数据包存入相对空闲率最高的数据处理线程的动态存储区SM,存入一个数据包则将该数据处理线程的计数器C加I ;数据处理线程D从自身的动态存储区SM中提取数据包进行处理,每处理一个数据包,就将自身的计数器C减I。这样,计数器C的数值就能够动态反映该数据处理线程的待处理数据包数量。详细的服务端多线程并行数据处理流程如图2所示,包括以下步骤
步骤I、服务端进程启动时,开启一个数据接收线程R,开启一个数据分配线程S以及开启一个包含多个数据处理线程D的数据处理线程池,同时开辟一段用于存储接收到的客户端数据的动态存储区BM,并按照FIFO方式管理动态存储区BM ;服务端为线程池中的每一个数据处理线程开辟一个动态存储区SM和一个初始值为O的计数器C ;
步骤2、数据接收线程R通过socket侦听并接收客户端传过来的数据包,直接把数据包放入数据存储区BM,立即返回继续侦听接收客户端数据;
步骤3、数据分配线程S对动态存储区BM进行轮询,如果动态存储区BM存在数据包,则从动态存储区BM中依次取出数据包,同时对线程池中的数据处理线程进行轮询,循环检测每个数据处理线程线程的相对空闲率如果存在当前待处理数据包个数C1为O或者已处理数据包个数为O的数据处理线程,这样的的数据处理线程其相对空闲率最高,则选择其中任意一个数据处理线程,将数据包放入该数据处理线程的动态存储区SM ;如否,则将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算
权利要求
1.一种海量数据多线程并行处理中的负载均衡方法,服务端利用多个并行的数据处理线程对接收到的数据进行处理,其特征在于对于每一个新接收到的数据包,服务端按照以下方法为其分配数据处理线程 判断是否存在当前待处理数据包个数C为O或者已处理数据包个数/7为O的数据处理线程,如是,则将新收到 的数据包分配给其中任意一个数据处理线程;如否,则将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算 麗=丄 CK 式中,V力相对空闲率;σ为该数据处理线程当前待处理数据包个数为该数据处理线程在处理个数据包后的数据处理效率,其表达式为如下J -η- n JVn^ OH=O 其中,为已处理数据包个数,k为该数据处理线程处理第个数据包所耗费时间。
全文摘要
本发明公开了一种海量数据多线程并行处理中的负载均衡方法,服务端利用多个并行的数据处理线程对接收到的数据进行处理,对于每一个新接收到的数据包,服务端按照以下方法为其分配数据处理线程判断是否存在当前待处理数据包个数C为0或者已处理数据包个数n为0的数据处理线程,如是,则将新收到的数据包分配给其中任意一个数据处理线程;如否,则将新收到的数据包分配给相对空闲率最高的数据处理线程。本发明根据相对空闲率对每个数据处理线程进行合理数据分配,能够显著提高系统对海量数据的并行处理、密集计算的能力,其算法实现简单,占用资源极少。
文档编号G06F9/50GK102866922SQ20121031560
公开日2013年1月9日 申请日期2012年8月31日 优先权日2012年8月31日
发明者彭建华, 徐立中, 石爱业, 周惠, 郭宇燕, 高红民 申请人:河海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1