一种高吞吐数据流处理方法与流程

文档序号:12694533阅读:来源:国知局

技术特征:

1.一种高吞吐数据流处理方法,具体步骤包括:

(1)读入接收层,调度层,业务层和转发层的配置参数;

(2)根据读入的配置参数,创建接收层的客户端状态维护线程、监听线程、读写事件监控线程、数据接收线程,业务层的业务线程,调度层的调度线程,转发层的发送线程;并将上述不同的线程分别绑定到不同的cpu核心上运行;

(3)如果有客户端请求连接,则通过监听线程判断接收的是否是合法的套接字,将合法的套接字加入套接字监听集合并在客户端状态表中记录该套接字的索引位置,已接收数据长度,时间戳和客户端计数器;如果套接字监听集合中有套接字状态改变,则通过读写事件监控线程判断套接字监听集合中状态发生改变的套接字是否产生读写事件,并将产生读事件的套接字放入待接收套接字队列中;如果待接收套接字队列不为空,则通过数据接收线程从待接收套接字队列中取出套接字,并将从客户端状态表中获取的该套接字的完整数据包放入数据接收队列,同时更新客户端状态表中该套接字的已接收数据长度和时间戳;客户端状态维护线程遍历客户端状态表中每个套接字的时间戳,如果套接字接收的时间戳超过预设的超时时间,则关闭该套接字,并删除该套接字在客户端状态表中的数据信息;如果数据接收队列不为空,调度线程则从数据接收队列中取出数据,放入对应的任务队列;如果任务队列不为空,业务处理线程则从自己对应的任务队列中取出任务数据进行处理,并将缓存的处理结果放入结果队列;如果结果队列不为空,发送线程采用轮询的方式从各个结果队列中取出数据发送给远端系统,在读结果队列时加读锁和互斥锁,完成后解锁。

2.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(1)中,所述参数包括:接收层可使用的cpu核心数recv_cpu_num,接收层线程数recv_thread_num,接收队列的长度recv_q_len,监听的端口号recv_listen_port,接收数据超时时间recv_timeout;调度层可使用的cpu核心数move_cpu_num,调度层线程数move_thread_num;业务层可使用的cpu核心数bsns_cpu_num,业务层线程数bsns_thread_num,任务队列的长度bsns_task_q_len,结果队列的长度bsns_result_q_len;转发层可使用的cpu核心数send_cpu_num,转发层线程数send_thread_num,转发目的IP及端口send_dst_ip/send_dst_port,响应http报文长send_back_http_len。

3.如权利要求2所述的高吞吐数据流处理方法,其特征在于,步骤(2)中,将不同的线程分别绑定到不同的cpu核心上运行包括以下几种情况:

(2.1)如果recv_cpu_num等于1,那么客户端状态维护线程、监听线程、读写事件监控线程、数据接收线程都绑定于0号核心;

(2.2)如果recv_cpu_num大于1,那么客户端状态维护线程、监听线程绑定于0号核心,读写事件监控线程、数据接收线程绑定于1~recv_cpu_num-1号核心;

(2.3)如果move_cpu_num大于等于1,那么调度线程都绑定于recv_cpu_num~recv_cpu_num+move_cpu_num-1号核心;

(2.4)如果bsns_cpu_num等于1,那么所有业务线程都绑定于recv_cpu_num+move_cpu_num核心上;

(2.5)如果bsns_cpu_num大于1,那么应急业务线程绑定于recv_cpu_num+move_cpu_num号核心,其他业务线程绑定于recv_cpu_num+move_cpu_num+1~recv_cpu_num+move_cpu_num+bsns_cpu_num-1号核心;

(2.6)如果send_cpu_num大于等于1,那么所有的发送线程都绑定于recv_cpu_num+move_cpu_num+bsns_cpu_num~recv_cpu_num+move_cpu_num+bsns_cpu_num+send_cpu_num-1号核心。

4.如权利要求2所述的高吞吐数据流处理方法,其特征在于,步骤(3)中,所述调度线程编号为i时,负责从编号为i+n*move_thread_num的数据接收队列中取出数据,放入编号为i+m*move_thread_num的任务队列;在将数据放入任务队列的过程中,如果该任务队列已满,则将m+1,尝试放入下一个相应的任务队列,如果该调度线程对应的任务队列都已满,则放入应急任务队列中;0<=n<=move_per_inq,move_per_inq表示每个队列当前的任务数量,0<=m<=bsns_thread_num/move_thread_num,每次调度成功则将n和m都加1。

5.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(2)中,将不同的线程分别绑定到不同的cpu核心运行的方法,包括:Linux系统下使用API:pthread_setaffinity_np(),Windows系统下使用API:SetThreadAffinityMask()。

6.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(3)中,将合法的套接字加入套接字监听集合的同时,在客户端状态表中,将该套接字索引位置设置为1,表示有效,将该套接字已接收数据长度重置为0,时间戳设置为当前时间,客户端计数器加1。

7.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(3)中,所述读写事件监控线程遍历套接字监听集合中每个状态发生改变的套接字,判断套接字是否产生读事件,如果是,则将该套接字在状态表中的时间戳更新为当前时间,并将该套接字放入待接收套接字队列,如果待接收套接字队列已满,则将套接字重新放入套接字监听集合,并记录待接收套接字队列满的日志信息;如果套接字产生的是写事件,则忽略该事件,将套接字重新放入套接字监听集合;如果是其他非正常事件,则关闭套接字,在客户端状态表中,将该套接字索引位置设置为0,表示失效,将客户端计数器减1。

8.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(3)中,所述数据接收线程从客户端状态表中不断接收取出的套接字的已接收数据长度及保存的半包数据,后续接收的数据追加在它后面,每达到一个完整的数据包,则将其放入数据接收队列;如果套接字数据已经读取完,并且最后的接收的数据包不完整,则更新客户端状态表中该套接字已接收数据长度为当前接收的半包长度,并将半包数据存入客户端状态表;如果最后接收的数据包完整,则将接收数据长度置为0;最后更新套接字的时间戳为当前时间。

9.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(3)中,在客户端状态表中将被关闭的套接字的索引位置置0,客户端计数器减1;遍历完客户端状态表后的客户端状态维护线程进入休眠状态。

10.如权利要求1所述的高吞吐数据流处理方法,其特征在于,步骤(3)中,所述业务处理线程从任务队列中取出任务进行处理,直至缓存的处理结果达到阈值数量或超过某个超时时间,将缓存的处理结果一次性放入结果队列,等待被发送,在将结果放入结果队列时,给结果队列加写锁,完成后解锁。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1