一种基于接收与处理分离的海量数据并发性处理方法

文档序号:6365782阅读:282来源:国知局
专利名称:一种基于接收与处理分离的海量数据并发性处理方法
技术领域
本发明涉及一种数据处理方法,尤其涉及一种基于接收与处理分离的海量数据并发性处理方法,属于计算机技术与通信领域。
背景技术
在基于TCP/IP的通信系统开发中,都要涉及到基于SOCKET技术进行程序的开发,基于SOCKET技术开发,涉及客户端发送数据与服务端接收数据,而基于SOCKET技术服务端的实现流程如下
1.加载套接字
2.创建监听的套接字
3.绑定套接字
4.监听套接字
5.收到客户端数据,处理客户端相关请求
在第5点,服务端接收到客户端数据,一般产生一个线程,把接收到的数据传给这个新线程进行处理。由于基于windows、linux或Unix系统的soctet通信一次通信传输的数据缺省情况是8K字节,因此在一次完整的业务过程中,如果客户端传输给服务端的数据达到几兆、几十兆以及上百兆,那么客户端将会对这些数据多次按顺序分包发送,而服务端将会多次接收到客户端基于同一个业务发过来的数据,然后对传过来的数据进行组包,进行处理,按照服务端接收客户端数据然后产生一个线程对传过来的数据进行处理,这样服务端将会在瞬间产生大量处理数据的线程,同时按照多线程的机制,服务端瞬间按顺序产生了大量线程,但这些线程的执行并不是按主线程产生子线程的顺序执行,同时产生的子线程也不是按先后顺序依次执行,而是按照调度无序并行执行,这样对基于同一业务的数据在服务端进行组包将出现问题。

发明内容
本发明所要解决的技术问题在于克服现有技术的不足,提供一种基于接收与处理分离的海量数据并发性处理方法,能够显著提高系统对海量数据的传输效率以及数据并行处理、密集计算的能力。本发明具体采用以下技术方案解决上述技术问题。一种基于接收与处理分离的海量数据并发性处理方法,服务端进程启动时,开启至少一个数据处理线程和一个数据接收线程,同时开辟一段用于存储接收到的客户端数据的动态存储区;数据接收线程通过socket侦听并接收客户端数据,并把接收到的客户端数据放入动态存储区;数据处理线程对动态存储区进行轮询,如果动态存储区存在数据,则从动态存储区中依次取出数据并对数据进行判断如果取得的数据是基于上一个数据包的数据,则对数据进行组包并判断数据是否是基于上一个数据包的最后数据,如果不是,则继续从动态存储区中取数据,直到取得的是基于同一个业务的最后一个数据包,则组包完成;将完整的基于同一业务的数据进行后续的业务处理。本发明方法通过将数据接收与处理分离,解决了系统接收、处理数据的瓶颈;通过多线程轮询,解决了接收后对数据按顺序进行组包的难题;本发明可显著提高系统处理海量数据传输的效率以及对海量数据的并行处理、密集计算的能力,并使系统稳定性得以提闻。


图I为本发明方法的原理示意 图2为本发明方法的流程示意图。
具体实施例方式下面结合附图对本发明的技术方案进行详细说明
本发明的思路是通过数据接收与处理分离,解决系统接收、处理数据的瓶颈;通过多线程轮询,解决接收后对数据按顺序进行组包的难题。本发明的关键在于数据接收和处理的分离,即服务端进程启动时,开启至少一个数据处理线程和一个数据接收线程,并开辟一片动态存储区。本发明方法的原理如图I所示。本发明方法,如图2所示,具体包括以下步骤
步骤I、服务端进程启动时,开启M(M表示多个,可以根据业务处理数据量大小以及服务器性能进行配置)个数据处理线程D,开启一个数据接收线程R,同时在程序中开辟一段用于存储接收到的客户端数据的动态存储区S,并按照FIFO方式管理动态存储区S ;
步骤2、数据接收线程R通过socket侦听并接收客户端传过来的数据,直接把数据放入数据存储区S,立即返回继续侦听接收客户端数据;
步骤3、数据处理线程D对动态存储区S进行轮询,如果动态存储区S存在数据,则从动态存储区S中依次取出数据并对数据进行判断如果取得的数据是基于上一个数据包的数据,则对数据进行组包并判断数据是否是基于上一个包的最后数据,如果不是,则继续从动态存储区S中取数据,直到取得的是基于同一个业务的最后一个数据包,则组包完成;
步骤4、对完成组包的完整的基于同一业务的数据进行后续的业务处理。至此,即完成了本发明的基于接收与处理分离的海量数据并发性处理过程。本发明在服务端进程启动时开启多个线程,并对这些线程进行逻辑上的分类,分为数据接收线程与数据处理线程,同时开辟一段动态存储区,通过动态存储区对数据接收线程与数据处理线程进行关联,数据接收线程只负责接收数据,然后把数据放入动态存储区,这样能够显著提高数据终端的接入量以及接入效率,显著提高单位时间终端接入数量;数据接收线程根据业务处理需要进行动态配置,以满足不同应用系统的数据处理要求;数据处理线程对动态存储区进行轮询并获取数据进行处理,这样多个数据处理线程并行处理,进行数据密集型计算、数据并行计算,显著提高海量数据处理能力
本发明方法逻辑清晰,数据接收与处理分离,解决了系统接收、处理数据的瓶颈,通过多线程轮询,解决了接收后对数据按顺序进行组包的难题,显著提高了系统处理海量数据传输的效率以及对海量数据的并行处理、密集计算的能力,并使系统稳定性得以提高。
权利要求
1.一种基于接收与处理分离的海量数据并发性处理方法,其特征在于,服务端进程启动时,开启至少一个数据处理线程和一个数据接收线程,同时开辟一段用于存储接收到的客户端数据的动态存储区;数据接收线程通过socket侦听并接收客户端数据,并把接收到的客户端数据放入动态存储区;数据处理线程对动态存储区进行轮询,如果动态存储区存在数据,则从动态存储区中依次取出数据并对数据进行判断如果取得的数据是基于上一个数据包的数据,则对数据进行组包并判断数据是否是基于上一个数据包的最后数据,如果不是,则继续从动态存储区中取数据,直到取得的是基于同一个业务的最后一个数据包, 则组包完成;将完整的基于同一业务的数据进行后续的业务处理。
全文摘要
本发明公开了一种基于接收与处理分离的海量数据并发性处理方法。服务端进程启动时,开启至少一个数据处理线程和一个数据接收线程,同时开辟一段动态存储区;数据接收线程通过socket侦听并接收客户端数据,并把数据放入动态存储区;数据处理线程对动态存储区进行轮询,如果其中存在数据,则从中依次取出数据并对数据进行判断如果是基于上一个数据包的数据,则对数据进行组包并判断数据是否是基于上一个包的最后数据,如果不是,则继续从动态存储区中取数据,直到取得的是基于同一个业务的最后一个数据包,则组包完成;将完整的基于同一业务的数据进行后续业务处理。本发明可提高大数据量数据传输、数据密集型计算、并行计算的效率,提高系统稳定性。
文档编号G06F9/38GK102624889SQ20121005603
公开日2012年8月1日 申请日期2012年3月6日 优先权日2012年3月6日
发明者周蕙, 彭建华, 徐立中 申请人:河海大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1