一种服务端多线程并行数据处理方法及负载均衡方法技术

技术编号:10810857 阅读:153 留言:0更新日期:2014-12-24 16:20
一种服务端多线程并行数据处理方法,包括以下步骤:步骤1、服务端进程启动时,开启一个数据接收线程,开启一个数据分配线程以及开启一个包含多个数据处理线程的数据处理线程池,同时开辟一段用于存储接收到的客户端数据的动态存储区,并按照FIFO方式管理动态存储区;步骤2、数据接收线程通过socket侦听并接收客户端传过来的数据包,直接把数据包放入数据存储区,立即返回继续侦听接收客户端数据; 步骤3、数据分配线程对动态存储区进行轮询。

【技术实现步骤摘要】
一种服务端多线程并行数据处理方法及负载均衡方法本申请是分案申请,原申请的申请号CN201210315602.7,申请日:2012.08.31,专利技术名称:一种海量数据多线程并行处理中的负载均衡方法。
本专利技术涉及海量数据的多线程并行处理,尤其涉及一种服务端多线程并行数据处理方法及和一种海量数据多线程并行处理中的负载均衡方法,属于计算机网络

技术介绍
在大规模部署的终端设备接入与海量数据并发处理系统中,系统单位时间内接收处理数据量非常大,系统接收后马上产生一个新的线程,对接收的数据进行处理这种方法,系统并发性效率将会显著降低,这是由于创建线程需要较多系统开销、同时频繁分配、释放系统资源也要花费较多时间,为了尽力减少系统不必要的开销以及计算时间,提高系统并行处理能力,一般采用多线程、线程池的方式进行,通过接收与处理分离的,采用FIFO方式处理数据,也就是先到达的数据先处理。系统接收数据后,如果随机或简单地对接收数据进行分配,由于线程对计算机时间片的分配以及数据内容的不同,每个数据处理的时间将不一致,随机分配将会造成数据处理线程池有的线程空闲,有的线程数据区中排放大量待处理数据,严重影响系统的性能,影响系统并发处理能力。
技术实现思路
本专利技术所要解决的技术问题在于提供一种服务端多线程并行数据处理方法及海量数据多线程并行处理中的负载均衡方法,能够将数据优先分配至当前比较空闲的数据处理线程进行处理,从而显著提高大规模部署的终端设备接入能力与海量数据的并行处理、密集计算的能力。为解决上述技术问题,专利技术具体采用以下技术方案:一种服务端多线程并行数据处理方法,其特征在于包括以下步骤:步骤1、服务端进程启动时,开启一个数据接收线程(R),开启一个数据分配线程(S)以及开启一个包含多个数据处理线程(D)的数据处理线程池,同时开辟一段用于存储接收到的客户端数据的动态存储区(BM),并按照FIFO方式管理动态存储区(BM);服务端为线程池中的每一个数据处理线程开辟一个动态存储区(SM)和一个初始值为0的计数器;步骤2、数据接收线程(R)通过socket侦听并接收客户端传过来的数据包,直接把数据包放入数据存储区(BM),立即返回继续侦听接收客户端数据;步骤3、数据分配线程(S)对动态存储区(BM)进行轮询,如果动态存储区(BM)存在数据包,则从动态存储区(BM)中依次取出数据包,同时对线程池中的数据处理线程进行轮询,循环检测每个数据处理线程的相对空闲率;如果存在当前待处理数据包个数C为0或者已处理数据包个数n为0的数据处理线程,这样的的数据处理线程其相对空闲率最高,则选择其中任意一个数据处理线程,将数据包放入该数据处理线程的动态存储区(SM);否则,将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算:式中,为相对空闲率;为该数据处理线程当前待处理数据包个数;为该数据处理线程在处理n个数据包后的数据处理效率,其表达式为如下:其中,n为已处理数据包个数,为该数据处理线程处理第n个数据包所耗费时间。一种海量数据多线程并行处理中的负载均衡方法,服务端利用多个并行的数据处理线程对接收到的数据进行处理,对于每一个新接收到的数据包,服务端按照以下方法为其分配数据处理线程:判断是否存在当前待处理数据包个数C为0或者已处理数据包个数n为0的数据处理线程,如是,则将新收到的数据包分配给其中任意一个数据处理线程;如否,则将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算:式中,为相对空闲率;为该数据处理线程当前待处理数据包个数;为该数据处理线程在处理n个数据包后的数据处理效率,其表达式为如下:其中,n为已处理数据包个数,为该数据处理线程处理第n个数据包所耗费时间。本专利技术的线程空闲率由两个因数决定:线程中排队待处理的数据包数以及线程处理数据的效率。通过线程对已处理数据包的时间进行线性平均得到当前线程的数据处理效率,线程中排队待处理的数据包与线程处理效率值的乘积,预测了后续当前线程还要花费多长时间处理完线程中待处理的数据包,这个处理时间越短,则表示后续放入该线程的数据将被更优先处理。同时,该算法计算简单,基本不耗费计算机资源,执行算法的时间只有千分之一微秒不到,即使海量数据分析处理的情况下,对系统性能、资源的影响也可以忽略。因此,该算法具有很强的实际应用价值。本专利技术的负载均衡方法根据每个数据处理线程的待处理数据包个数和数据处理效率计算其相对空闲率,并根据相对空闲率对每个数据处理线程进行合理数据分配,能够显著提高系统对海量数据的并行处理、密集计算的能力。附图说明图1为服务端多线程并行数据处理的原理示意图;图2为服务端多线程并行数据处理的流程示意图。具体实施方式下面结合附图对本专利技术的技术方案进行详细说明:本专利技术的思路是在对多线程并行处理的数据进行分配时,根据各数据处理线程的相对空闲率来对每个数据处理线程进行合理数据分配,从而提高系统对海量数据的并行处理、密集计算的能力。图1显示了一个服务端多线程并行数据处理的实例,在该实例中,服务端在进程启动时,开启一个数据接收线程R,并创建包含多个数据处理线程D的线程池,以及一个数据分发线程S,同时开辟一段动态存储区BM,并为线程池中的每一个数据处理线程D开辟一个动态存储区SM和一个初始值为0的计数器C;数据接收线程R只负责接收数据包并将其存入动态存储区BM;数据分发线程S循环读取动态存储区BM中的数据包,并根据线程池中各数据处理线程的相对空闲率将数据包存入相对空闲率最高的数据处理线程的动态存储区SM,存入一个数据包则将该数据处理线程的计数器C加1;数据处理线程D从自身的动态存储区SM中提取数据包进行处理,每处理一个数据包,就将自身的计数器C减1。这样,计数器C的数值就能够动态反映该数据处理线程的待处理数据包数量。详细的服务端多线程并行数据处理流程如图2所示,包括以下步骤:步骤1、服务端进程启动时,开启一个数据接收线程R,开启一个数据分配线程S以及开启一个包含多个数据处理线程D的数据处理线程池,同时开辟一段用于存储接收到的客户端数据的动态存储区BM,并按照FIFO方式管理动态存储区BM;服务端为线程池中的每一个数据处理线程开辟一个动态存储区SM和一个初始值为0的计数器C;步骤2、数据接收线程R通过socket侦听并接收客户端传过来的数据包,直接把数据包放入数据存储区BM,立即返回继续侦听接收客户端数据;步骤3、数据分配线程S对动态存储区BM进行轮询,如果动态存储区BM存在数据包,则从动态存储区BM中依次取出数据包,同时对线程池中的数据处理线程进行轮询,循环检测每个数据处理线程的相对空闲率:如果存在当前待处理数据包个数C为0或者已处理数据包个数n为0的数据处理线程,这样的的数据处理线程其相对空闲率最高,则选择其中任意一个数据处理线程,将数据包放入该数据处理线程的动态存储区SM;如否,则将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算:式中,为相对空闲率;为该数据处理线程当前待处理数据包个数;为该数据处理线程在处理n个数据包后的数据处理效率,其表达式为如下:其中,n为已处本文档来自技高网...
一种服务端多线程并行数据处理方法及负载均衡方法

【技术保护点】
一种服务端多线程并行数据处理方法,其特征在于包括以下步骤:步骤1、服务端进程启动时,开启一个数据接收线程(R),开启一个数据分配线程(S)以及开启一个包含多个数据处理线程(D)的数据处理线程池,同时开辟一段用于存储接收到的客户端数据的动态存储区(BM),并按照FIFO方式管理动态存储区(BM);服务端为线程池中的每一个数据处理线程开辟一个动态存储区(SM)和一个初始值为0的计数器;步骤2、数据接收线程(R)通过socket侦听并接收客户端传过来的数据包,直接把数据包放入数据存储区(BM),立即返回继续侦听接收客户端数据; 步骤3、数据分配线程(S)对动态存储区(BM)进行轮询,如果动态存储区(BM)存在数据包,则从动态存储区(BM)中依次取出数据包,同时对线程池中的数据处理线程进行轮询,循环检测每个数据处理线程的相对空闲率;如果存在当前待处理数据包个数C为0或者已处理数据包个数n为0的数据处理线程,这样的的数据处理线程其相对空闲率最高,则选择其中任意一个数据处理线程,将数据包放入该数据处理线程的动态存储区(SM);否则,将新收到的数据包分配给相对空闲率最高的数据处理线程,所述数据处理线程的相对空闲率按照以下公式计算:式中,为相对空闲率;为该数据处理线程当前待处理数据包个数;为该数据处理线程在处理n个数据包后的数据处理效率,其表达式为如下:其中,n为已处理数据包个数,为该数据处理线程处理第n个数据包所耗费时间。...

【技术特征摘要】
1.一种服务端多线程并行数据处理方法,其特征在于包括以下步骤:步骤1、服务端进程启动时,开启一个数据接收线程(R),开启一个数据分配线程(S)以及开启一个包含多个数据处理线程(D)的数据处理线程池,同时开辟一段用于存储接收到的客户端数据的动态存储区(BM),并按照FIFO方式管理动态存储区(BM);服务端为线程池中的每一个数据处理线程开辟一个动态存储区(SM)和一个初始值为0的计数器;步骤2、数据接收线程(R)通过socket侦听并接收客户端传过来的数据包,直接把数据包放入数据存储区(BM),立即返回继续侦听接收客户端数据;步骤3、数据分配线程(S)对动态存储区(BM)进行轮询,如果动态存储区(BM)存在数...

【专利技术属性】
技术研发人员:周惠彭建华高红民
申请(专利权)人:南京工业职业技术学院
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1