CN107479966B - 一种基于多核心cpu的信令采集方法 - Google Patents
一种基于多核心cpu的信令采集方法 Download PDFInfo
- Publication number
- CN107479966B CN107479966B CN201710533717.6A CN201710533717A CN107479966B CN 107479966 B CN107479966 B CN 107479966B CN 201710533717 A CN201710533717 A CN 201710533717A CN 107479966 B CN107479966 B CN 107479966B
- Authority
- CN
- China
- Prior art keywords
- worker
- thread
- signaling
- connection
- signaling data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000011664 signaling Effects 0.000 title claims abstract description 93
- 238000000034 method Methods 0.000 title claims abstract description 25
- 238000004458 analytical method Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Environmental & Geological Engineering (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于多核心CPU的信令采集方法,所述方法包括如下步骤:主线程获取当前CPU的核心数;主线程创建Master线程,用于侦听来自网络的TCP连接;主线程根据当前CPU核心数的数量创建多个Worker线程,并对每个Worker线程进行编号获得不同的Worker ID,所述Worker线程用于接收并处理信令数据;Master线程对侦听到的新连接进行分析,并根据新连接的类型将需要处理的信令数据发送给相应Worker ID的Worker线程进行处理。本发明解决了CPU多核心利用的问题,且每个Worker单线程都可以处理大量的信令采集设备的连接。
Description
技术领域
本发明属于通信领域,尤其涉及一种基于多核心CPU的信令采集方法。
背景技术
为了进行信令数据分析,比如说要统计时间端话务峰值、统计各通信线路忙闲占用情况、分析话务地区分布等等,需要将通信线路上的信令数据归集到一台服务器上然后进行处理,如分析、入库等等,以下将这台负责归集信令的服务器称为采集服务器或信令采集设备。负责在通信链路上截获信令的是专用设备,该设备以TCP Client长连接的方式连接到采集服务器上,并向其上传信令数据。依照处理容量及地区分布,截获信令的设备会有较多的数量。现有的采集服务器的实现方法有两种:一种是基于多线程的思路,即对于每个TCP Client的连接,采集服务器都会创建一个独立的线程为其进行数据接收,但是这种线程切换是有代价的,其不适合客户端较多(1000以上)的场景;另一种是基于epoll的异步Socket通信技术,其在服务器启动时会启动一个epoll线程负责侦听并读取连接上来的客户端,该技术可并发处理的连接数量非常多,但是由于其是单线程的工作模式,不能充分利用现代多核CPU的性能。
发明内容
为了解决以上问题,本发明的目的在于提供一种既能接受大量信令采集设备的连接,又能充分利用多核心CPU性能的信令采集方案。
本发明解决其问题所采用的技术方案是:
一种基于多核心CPU的信令采集方法,所述方法包括如下步骤:
主线程获取当前CPU的核心数;
主线程创建Master线程,用于侦听来自网络的TCP连接;
主线程根据当前CPU核心数的数量创建多个Worker线程,并对每个Worker线程进行编号获得不同的Worker ID,所述Worker线程用于接收并处理信令数据;
Master线程对侦听到的新连接进行分析,并根据新连接的类型将需要处理的信令数据发送给相应Worker ID的Worker线程进行处理。
作为本发明上述技术方案的可选方案,所述主线程创建Worker线程的数量为CPU核心数数量的两倍。
作为本发明上述技术方案的可选方案,对每个Worker线程进行编号的方式为:按照创建的先后,从0开始递增,为Worker线程进行编号。
作为本发明上述技术方案的可选方案,所述Master线程对侦听到的新连接进行分析包括:判断该新连接是来自信令采集设备还是Worker线程,并根据判断的结果将新连接分为两个不同的类型。
作为本发明上述技术方案的进一步改进,若Master线程判断侦听到的新连接是来自信令采集设备,则执行如下步骤:
分配出下一个处理信令数据的Worker ID;
通过上述Worker ID找到对应的Worker TCP连接;
接受由新连接发送来的接口,并将接口值通过Worker TCP连接发送给Worker线程;
Master线程继续侦听来自网络的TCP连接。
作为本发明上述技术方案的进一步改进,若Master线程判断侦听到的新连接是来自 Worker线程,则执行如下步骤:
接受由新连接发送来的接口,并且当前Worker线程将自己的Worker ID发送给Master 线程;
Master线程收到Worker线程的Worker ID后,将Worker ID与TCP连接建立对应关系;
Master线程继续侦听来自网络的TCP连接。
作为本发明上述技术方案的进一步改进,Worker线程处理信令数据包括如下步骤:
创建多路复用IO接口;
创建连向Master线程的TCP Client连接;
向Master线程发送自己的Worker ID;
将连向Master线程的TCP Client连接的接口在多路复用IO接口中进行注册;
等待接收信令数据,并对接收到的信令数据的类型进行判断,根据信令数据的类型对信令数据进行分类处理。
作为本发明上述技术方案的进一步改进,若Worker线程判断接收到的信令数据的类型是来自信令采集设备,则从信令采集设备的连接中读取信令数据并进行处理,之后继续等待接收信令数据。
作为本发明上述技术方案的进一步改进,若Worker线程判断接收到的信令数据的类型是来自Master线程,则执行如下步骤:
从Master线程的连接中读取数据,该数据为信令采集设备的连接的接口值;
将新接收到的接口值在多路复用IO接口中进行注册;
继续等待接收信令数据。
作为本发明上述技术方案的可选方案,所述多路复用IO接口为epoll。
本发明相对现有技术具有如下有益的技术效果:
本发明通过Master-Worker线程的设计方式,对信令采集过程进行了任务分配。Master 线程仅仅负责连接的接收与分配,保证新进入的连接会被均匀的分配到不同的Worker线程上,从而也就让连接可以交由不同的CPU核心进行处理,以此解决了CPU多核心利用的问题。而每个Worker线程中都使用了多路复用IO接口,如epoll进行数据收发处理,因此每个 Worker单线程都可以处理大量的信令采集设备的连接。
附图说明
图1为本发明一种基于多核心CPU的信令采集方法的整体流程图;
图2为本发明一种基于多核心CPU的信令采集方法的另一个实施例中Master线程的流程图;
图3为本发明一种基于多核心CPU的信令采集方法的又一个实施例中Worker线程的流程图。
具体实施方式
以下结合附图对本发明的具体实施方式作进一步详细地说明。
如图1所示,根据本发明一种基于多核心CPU的信令采集方法的一个实施例,其包括如下步骤:
主线程进行初始化,并获取当前CPU的核心数;
主线程创建Master线程,用于侦听来自网络的TCP连接;
主线程根据当前CPU核心数的数量创建多个Worker线程,并对每个Worker线程进行编号获得不同的Worker ID,所述Worker线程用于接收并处理信令数据;
Master线程对侦听到的新连接进行分析,并根据新连接的类型将需要处理的信令数据发送给相应Worker ID的Worker线程进行处理。
在上述各线程的大致任务结束后,就可以等待系统通知了,如Kill消息。
作为本发明上述实施例的优选实施方式,所述主线程创建Worker线程的数量可以设置为 CPU核心数数量的两倍。也可以根据实际客户端多少的情况结合CPU核心数的数量,来设置 Worker线程的数量。
作为本发明上述实施例的优选实施方式,对每个Worker线程进行编号的方式可以为:按照创建的先后,从0开始递增,为Worker线程进行编号,从而为每个Worker线程创建不同的Worker ID。所述编号可以是连续的,也可以是不连续的。
根据本发明一种基于多核心CPU的信令采集方法的另一个实施例,其包括上述实施例的基础步骤,并在上述实施例的基础之上,所述Master线程可以首先初始化信令采集接口和 Worker消息接口。若以Socket表示本发明中建立网络通信连接的一对接口,则信令采集接口可以表示为信令采集Socket,其用于采集来自信令采集设备的信令,当然也可用其它字符来表示,如API,以下不再做过多累赘地说明。同样,Worker消息接口可以表示为Worker消息 Socket,其用于Master线程与Worker线程之间的通信。为了便于更好地理解本实施例,请参照图2Master线程的一个流程图,其中初始化信令采集Socket可以包括创建TCP Socket并调用bind()、listen()函数,初始化Worker消息Socket也可以包括创建TCPSocket并调用bind()、 listen()函数。然后Master线程可以同时侦听信令采集Socket与Worker消息Socket。特别地, Master线程可以调用Select()函数来检测新连接,一旦检测到有新的连接,Master线程可以执行以下步骤,包括:
判断该新连接是来自信令采集设备还是Worker线程;
若Master线程判断侦听到的新连接是来自信令采集设备,则执行如下步骤:
分配出下一个处理信令数据的Worker ID,若Worker ID是连续编号的,则下一个处理信令数据的Worker ID计算方式为:(最后一次分配的Worker ID+1)除以Worker总数,并对结果取余;
通过上述Worker ID找到对应的Worker TCP连接;
调用Accept()接受由新连接发送来的Socket,并将Socket值通过Worker TCP连接发送给Worker线程;
Master线程继续侦听来自网络的TCP连接。
若Master线程判断侦听到的新连接是来自Worker线程,则执行如下步骤:
调用Accept()接受由新连接发送来的Socket,并且当前Worker线程将自己的Worker ID发送给Master线程;
Master线程收到Worker线程的Worker ID后,将Worker ID与TCP连接建立对应关系;
Master线程继续侦听来自网络的TCP连接。
由于epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。
因此,根据本发明一种基于多核心CPU的信令采集方法的又一个实施例,请参照图3Worker线程的一个流程图,本实施例包括上述实施例的基础步骤,并在上述实施例的基础之上,所述Worker线程处理信令数据可以包括如下步骤:
创建多路复用IO接口,作为本实施例优选地实施方式,所述多路复用IO接口为epoll,因此可以调用epoll_create()来创建并初始化epoll(以下以epoll来代表多路复用IO接口,不再做过多累赘的说明);
创建连向Master线程的TCP Client连接;
向Master线程发送自己的Worker ID;
调用epoll_ctl()将连向Master线程的TCP Client连接的Socket在epoll中进行注册;
调用epoll_wait()等待接收信令数据,并对接收到的信令数据的类型进行判断,根据信令数据的类型对信令数据分别进行如下处理:
若Worker线程判断接收到的信令数据的类型是来自信令采集设备,则从信令采集设备的连接中读取信令数据并进行处理,之后继续等待接收信令数据。
若Worker线程判断接收到的信令数据的类型是来自Master线程,则执行如下步骤:
从Master线程的连接中读取数据,该数据为信令采集设备的连接的Socket值;
调用epoll_ctl()将新接收到的Socket值在epoll中进行注册;
继续等待接收信令数据。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (6)
1.一种基于多核心CPU的信令采集方法,其特征在于,所述方法包括如下步骤:
主线程获取当前CPU的核心数;
主线程创建Master线程,用于侦听来自网络的TCP连接;
主线程根据当前CPU核心数的数量创建多个Worker线程,并对每个Worker线程进行编号获得不同的Worker ID,所述Worker线程用于接收并处理信令数据,对每个Worker线程进行编号的方式为:按照创建的先后,从0开始递增,为Worker线程进行编号;
Master线程对侦听到的新连接进行分析,并根据新连接的类型将需要处理的信令数据发送给相应Worker ID的Worker线程进行处理,所述Master线程对侦听到的新连接进行分析包括:判断该新连接是来自信令采集设备还是Worker线程,并根据判断的结果将新连接分为两个不同的类型;
若Master线程判断侦听到的新连接是来自信令采集设备,则执行如下步骤:
分配出下一个处理信令数据的Worker ID;
通过上述Worker ID找到对应的Worker TCP连接;
接受由新连接发送来的接口,并将接口值通过Worker TCP连接发送给Worker线程;
Master线程继续侦听来自网络的TCP连接;
若Master线程判断侦听到的新连接是来自Worker线程,则执行如下步骤:
接受由新连接发送来的接口,并且当前Worker线程将自己的Worker ID发送给Master线程;
Master线程收到Worker线程的Worker ID后,将Worker ID与TCP连接建立对应关系;
Master线程继续侦听来自网络的TCP连接。
2.根据权利要求1所述的一种基于多核心CPU的信令采集方法,其特征在于,所述主线程创建Worker线程的数量为CPU核心数数量的两倍。
3.根据权利要求1所述的一种基于多核心CPU的信令采集方法,其特征在于,Worker线程处理信令数据包括如下步骤:
创建多路复用IO接口;
创建连向Master线程的TCP Client连接;
向Master线程发送自己的Worker ID;
将连向Master线程的TCP Client连接的接口在多路复用IO接口中进行注册;
等待接收信令数据,并对接收到的信令数据的类型进行判断,根据信令数据的类型对信令数据进行分类处理。
4.根据权利要求3所述的一种基于多核心CPU的信令采集方法,其特征在于,若Worker线程判断接收到的信令数据的类型是来自信令采集设备,则从信令采集设备的连接中读取信令数据并进行处理,之后继续等待接收信令数据。
5.根据权利要求3所述的一种基于多核心CPU的信令采集方法,其特征在于,若Worker线程判断接收到的信令数据的类型是来自Master线程,则执行如下步骤:
从Master线程的连接中读取数据,该数据为信令采集设备的连接的接口值;
将新接收到的接口值在多路复用IO接口中进行注册;
继续等待接收信令数据。
6.根据权利要求3至5任一项所述的一种基于多核心CPU的信令采集方法,其特征在于,所述多路复用IO接口为epoll。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710533717.6A CN107479966B (zh) | 2017-07-03 | 2017-07-03 | 一种基于多核心cpu的信令采集方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710533717.6A CN107479966B (zh) | 2017-07-03 | 2017-07-03 | 一种基于多核心cpu的信令采集方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107479966A CN107479966A (zh) | 2017-12-15 |
CN107479966B true CN107479966B (zh) | 2020-11-03 |
Family
ID=60596395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710533717.6A Active CN107479966B (zh) | 2017-07-03 | 2017-07-03 | 一种基于多核心cpu的信令采集方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107479966B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109933429A (zh) * | 2019-03-05 | 2019-06-25 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN110781135B (zh) * | 2019-09-20 | 2023-05-30 | 北京三快在线科技有限公司 | 分布式搜索系统、索引分发方法及存储介质 |
CN111813642A (zh) * | 2020-07-06 | 2020-10-23 | 成都深思科技有限公司 | 基于多线程的网络通讯会话数据统计运算方法 |
CN116743860B (zh) * | 2023-08-08 | 2023-10-27 | 中国空气动力研究与发展中心高速空气动力研究所 | 一种风洞现场实时数据分布式多线程采集架构 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7873817B1 (en) * | 2004-10-19 | 2011-01-18 | Broadcom Corporation | High speed multi-threaded reduced instruction set computer (RISC) processor with hardware-implemented thread scheduler |
CN102609307A (zh) * | 2012-03-07 | 2012-07-25 | 汉柏科技有限公司 | 多核多线程双操作系统网络设备及其控制方法 |
CN103164256A (zh) * | 2011-12-08 | 2013-06-19 | 深圳市快播科技有限公司 | 一种实现单机支持高并发处理方法及系统 |
CN103312625A (zh) * | 2012-03-09 | 2013-09-18 | 深圳市腾讯计算机系统有限公司 | 一种网络通信的方法和系统 |
CN103605568A (zh) * | 2013-10-29 | 2014-02-26 | 北京奇虎科技有限公司 | 一种多线程管理方法及装置 |
CN104536724A (zh) * | 2014-12-25 | 2015-04-22 | 华中科技大学 | 一种多核环境下哈希表并发访问性能优化方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2683128A1 (en) * | 2012-07-05 | 2014-01-08 | Gemalto SA | A method for communicating data between a first device and a second device, corresponding second device and system |
CN105357770A (zh) * | 2015-09-25 | 2016-02-24 | 深圳市天海基业科技有限公司 | 通信方法、装置及系统 |
-
2017
- 2017-07-03 CN CN201710533717.6A patent/CN107479966B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7873817B1 (en) * | 2004-10-19 | 2011-01-18 | Broadcom Corporation | High speed multi-threaded reduced instruction set computer (RISC) processor with hardware-implemented thread scheduler |
CN103164256A (zh) * | 2011-12-08 | 2013-06-19 | 深圳市快播科技有限公司 | 一种实现单机支持高并发处理方法及系统 |
CN102609307A (zh) * | 2012-03-07 | 2012-07-25 | 汉柏科技有限公司 | 多核多线程双操作系统网络设备及其控制方法 |
CN103312625A (zh) * | 2012-03-09 | 2013-09-18 | 深圳市腾讯计算机系统有限公司 | 一种网络通信的方法和系统 |
CN103605568A (zh) * | 2013-10-29 | 2014-02-26 | 北京奇虎科技有限公司 | 一种多线程管理方法及装置 |
CN104536724A (zh) * | 2014-12-25 | 2015-04-22 | 华中科技大学 | 一种多核环境下哈希表并发访问性能优化方法 |
Non-Patent Citations (1)
Title |
---|
memcached主线程工作线程通信机制;关于会飞的猪;《https://blog.csdn.net/qq_15457239/article/details/48490271》;20150916;第1-2页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107479966A (zh) | 2017-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107479966B (zh) | 一种基于多核心cpu的信令采集方法 | |
CN108776934B (zh) | 分布式数据计算方法、装置、计算机设备及可读存储介质 | |
CN111258737B (zh) | 一种资源调度的方法、装置和过滤式调度器 | |
CN101547150B (zh) | 数据通信输入端口调度的方法及装置 | |
CN104468638B (zh) | 一种分布式数据处理方法及系统 | |
CN105007337A (zh) | 集群系统负载均衡的方法和系统 | |
CN111163018B (zh) | 网络设备及其降低传输时延的方法 | |
CN112003797B (zh) | 一种虚拟化dpdk网络性能提高方法、系统、终端及存储介质 | |
CN105516266B (zh) | 一种业务监控方法、系统及相关设备 | |
CN108989151B (zh) | 用于网络或应用性能管理的流量采集方法 | |
CN109947581B (zh) | 高并发的数据传送方法及用于交换机的数据传送方法 | |
WO2020134840A1 (zh) | 数据分配方法及相关产品 | |
CN109104491A (zh) | 一种微服务调用方法、装置、服务器及存储介质 | |
CN110557432B (zh) | 一种缓存池均衡优化方法、系统、终端及存储介质 | |
CN111367675A (zh) | 一种线程调度方法、装置、设备及存储介质 | |
EP2940600A1 (en) | Data scanning method and device | |
CN112860401B (zh) | 任务调度方法、装置、电子设备和存储介质 | |
CN109889406A (zh) | 用于管理网络连接的方法、装置、设备和存储介质 | |
WO2019029721A1 (zh) | 任务的调度方法、装置、设备及存储介质 | |
CN107634978B (zh) | 一种资源调度方法及装置 | |
CN111352710B (zh) | 进程管理方法及装置、计算设备、存储介质 | |
CN111376255B (zh) | 机器人数据采集方法、装置及终端设备 | |
CN110737530A (zh) | 一种提升handle标识解析系统收包能力的方法 | |
CN106453118B (zh) | 一种流量控制方法及流量控制系统 | |
CN103973811A (zh) | 一种可动态迁移的高可用集群管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231227 Address after: 519060 No.1, Pingdong 1st Road, Nanping Science and Technology Industrial Park, Zhuhai City, Guangdong Province Patentee after: ZHUHAI COMLEADER INFORMATION TECHNOLOGY Co.,Ltd. Patentee after: HENAN XINDA WANGYU TECHNOLOGY Co.,Ltd. Address before: Pingtung 519060 Guangdong province Zhuhai Nanping Science and Technology Industrial Park Road No. Patentee before: ZHUHAI COMLEADER INFORMATION TECHNOLOGY Co.,Ltd. |