CN109408248A - 一种Linux下线程间通信系统 - Google Patents
一种Linux下线程间通信系统 Download PDFInfo
- Publication number
- CN109408248A CN109408248A CN201811092291.6A CN201811092291A CN109408248A CN 109408248 A CN109408248 A CN 109408248A CN 201811092291 A CN201811092291 A CN 201811092291A CN 109408248 A CN109408248 A CN 109408248A
- Authority
- CN
- China
- Prior art keywords
- itc
- thread
- message
- component
- affairs
- 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.)
- Granted
Links
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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种Linux下线程间通信系统,每个线程中创建一ITC客户端,线程间通过ITC客户端进行通信。ITC系统负责管理线程间通信的会话、事务和消息,它包括业务层、组件层以及基础层;应用程序使用ITC系统,可极大降低线程间通信会话和事务的维护成本。
Description
技术领域
本发明涉及一种Linux下线程间通信系统。
背景技术
目前在Linux下,比较常用的线程间通讯方式有管道、共享内存等。管道是很常用的Linux线程间通讯方式,调用方便,对数据内容的兼容性较好;共享内存的方式效率极高,但安全性和稳定性比较欠佳。现有的Linux线程间通讯方式较偏向底层通讯,对上层应用的支持不够充分和有效。基于事务、会话等机制构建的应用程序若直接使用这些通讯方式,则会带来编码工作量增大,软件复杂度提高,可维护性降低等消极影响。
发明内容
本发明要解决的技术问题,在于提供一种Linux下线程间通信系统,便于用户使用,提高可维护性。
本发明是这样实现的:一种Linux下线程间通信系统,每个线程中创建一ITC客户端,线程间通过所述ITC客户端进行通信;所述ITC包括业务层、组件层以及基础层;
所述业务层包括UserAgent以及Manager,所述UserAgent用于管理线程的对外通讯的所有发送和接收事务,所述Manager用于管理UserAgent的创建、修改以及销毁;
所述组件层包括事务组件以及传输组件,所述事务组件负责创建、修改以及销毁通讯事务,解析和封装通讯消息,维护通讯消息与通讯事务之间的对应关系;所述传输组件负责查询UserAgent地址,收发Socket数据消息;
所述基础层包括消息组件以及基础工具,所述消息组件用于解析和封装消息数据;所述基础工具包括编号组件、哈希表组件以及内存池组件;所述编号组件用于生成线程内部全局唯一的编号;所述哈希表组件用于快速索引线程内部实体;所述内存池组件用于管理内存,释放和申请内存。
本发明具有如下优点:本发明一种Linux下线程间通信系统,应用程序的会话、事务等通讯模块维护成本大大降低,所有消息、事务都由本系统处理和统一管理。应用程序的线程间通讯可实现基于事务的编程。支持后续应用中通讯业务的扩展。程序通讯业务的扩张和定制只需通过在本系统顶层迭代开发即可实现。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明ITC通信框架图。
图2为本发明ITC中UA结构示意图。
图3为本发明中ITC中UA管理流程图。
图4为本发明ITC数据流图。
图5为本发明具体实施方式中处理消息流程图。
具体实施方式
本发明一种Linux下线程间通信系统,每个线程中创建一ITC客户端,线程间通过所述ITC客户端进行通信;所述ITC包括业务层、组件层以及基础层;
所述业务层包括UserAgent以及Manager,所述UserAgent用于管理线程的对外通讯的所有发送和接收事务,所述Manager用于管理UserAgent的创建、修改以及销毁;
所述组件层包括事务组件以及传输组件,所述事务组件负责创建、修改以及销毁通讯事务,解析和封装通讯消息,维护通讯消息与通讯事务之间的对应关系;所述传输组件负责查询UserAgent地址,收发Socket数据消息;
所述基础层包括消息组件以及基础工具,所述消息组件用于解析和封装消息数据;所述基础工具包括编号组件、哈希表组件以及内存池组件;所述编号组件用于生成线程内部全局唯一的编号;所述哈希表组件用于快速索引线程内部实体;所述内存池组件用于管理内存,释放和申请内存。
所述每个ITC客户端都注册至ITC服务器上。
本发明一种具体实施方式:
1.概念介绍
a.ITC:Inter-Thread Communication,线程间通讯模块。
b.UA:ITC User Agent,ITC用户代理,负责一个线程的对外通讯的所有发送和接收事务。
c.MANAGER:ITC Manager负责登记和管理所有UA,为UA提供消息的路由信息。
d.消息类型:请求、应答和命令。一个请求对应一个应答;命令无需应答。
2.系统框架
如图1所示,ITC通信框架:每个线程创建一个UA,使用线程名作为UA唯一标识,向MANAGER登记,UA通过线程名来指定请求和响应消息的目的地。
如图2所示,ITC中UA结构
a.transaction:事务组件,负责管理消息事务。
b.postmain:传输组件,负责管理线程消息连接,即UA地址信息(如:管道等)。
c.msg:消息组件,负责解析和封装消息数据。
d.id:编号组件,负责生成线程内部全局唯一的编号(标识:事务等)。
e.hash table:哈希表组件,负责快速索引线程内部实体(如:事务等)。
f.memory pool:内存池组件,负责管理UA内存,快速释放和申请内存。
如图3所示,ITC中UA管理:线程UA创建后需注册到Manager,登记UA地址信息。某个线程需要发送消息时,可以通过Manager提供的API接口获取目标线程的UA地址。
如图4所示,ITC数据流:线程A向B发送请求,B回复应答给A
a.线程A向线程B发送请求;
b.UA-A创建请求事务,构建请求消息,向Manager查询UA-B的地址;
c.UA-A向UA-B发送请求;
d.UA-B收到请求,创建应答事务,解析请求消息;
e.UA-B向线程B业务模块上报请求消息,线程B业务模块回复请求;
f.UA-B构建应答消息,向Manager查询UA-B的地址;
g.UA-B向UA-A发送应答,结束并释放应答事务;
h.UA-A收到应答,匹配事务,解析应答消息;
i.UA-A向线程A业务模块上报应答消息;UA-A结束并释放请求事务;
j.线程A处理应答;
ITC消息格式
a.type:消息类型。request、response和command
b.from:消息发送方。UA唯一标识(即:线程名)。
c.to:消息接收方,UA唯一标识(即:线程名)。
d.from-tag:请求事务标识,线程内部全局唯一。
e.to-tag:应答事务标识,线程内部全局唯一。
f.body:消息内容,用户可自定义。
一、ITC框架设计
整个ITC框架由三层(业务层、组件层、基础层)组成。用户应用程序通过调用业务层的提供的API来使用ITC框架。即业务层既对内组织起了整个ITC的功能,又充当API对外提供服务。
以下根据功能分别描述ITC中的各个模块:
ITC框架中,主要有两个概念:一是消息,二是事务。
消息:Message;Message是线程间通信中信息传递的基本单元。
根据功能的差异,Message分为三种。下文的说明以线程A发送Message到线程B为例:
表格2-1Message类型说明
事务:Transaction;为了实现消息通讯的记忆性,需要有一个载体来存储ITC-UA之间往返的消息。
这个载体就是Transaction(事务)。事务是针对“请求-应答”型的消息而存在的,命令(通知)式的消息不存在事务的概念。
一个事务包括一条请求和关于这条请求的应答。
事务保存了一条请求的通讯两端标识、创建时间等信息,并且完整保留了消息的副本,以便能够进行功能扩展,从而支持事务超时检测等功能。
在一个“请求-应答”被完整地处理后,对应的事务也就结束了它的生命周期。
1.1创建ITC-UA
这个场景采用了简单工厂模式,ItcCreate()这个函数可以直接看作一个生产ITC-UA的简单工厂。
当用户调用ItcCreate()这个函数,传入新的ITC-UA标识之后,在ItcCreate函数内部会为新的一个ItcUa分配地址空间,初始化ItcUa结构体参数。随后,调用ItcManager提供的注册函数,向全局唯一的ItcManager注册自己的标识信息和句柄。这样,以后其他的ITC-UA想要发送消息到这个新的ITC-UA,就可以通过这个ITC-UA的标识找到对应的句柄,从而能把消息发送过来。
1.2销毁ITC-UA
当用户调用ItcDestroy()这个函数,传入一个已建立的ITC-UA句柄之后,在ItcCreate函数内部会为这个ItcUa解除位于ItcManager中的注册(之后其他ITC-UA发送消息到这个ITC-UA的都会返回失败),随后,销毁这个ITC-UA所使用的事务池、通讯管道,回收ITC-UA的内存空间。
1.3注册ITC-UA接收时回调函数
1.Message分为三种类型(命令、请求、应答);
2.一个线程对应一个ITC-UA,接收和处理是同步且单线程的过程;
3.简化用户ITC-UA应答API参数
所以:
ItcRegisterCallBack()需要用户提供分别对应于命令消息、请求消息和应答消息接收时的回调函数,也就是三个回调函数。
1.4接收消息
当用户调用ItcReceive()时,ITC-UA将调用内部的ItcPostman对通讯管道中的数据进行接收,如果有新的数据,则将数据封装为ItcMsg,储存到ITC-UA内部的stCurrentMessage中。每次调用ItcReceive()只能接收一个ItcMsg。
调用ItcReceive()之后,用户需要再调用ItcHandle()来对此次收到的ItcMsg进行回调处理。
1.5处理消息
如图5所示,当用户调用ItcHandle()后,ITC-UA将根据内部存储的ItcMsg缓存的消息类型来决定接下来的处理流程。
阶段1:
如果收到的是命令消息,则直接进入用户回调流程。
如果收到的是请求消息或应答消息,就要依赖ITC-UA内部的事务列表。
若收到了请求消息,则要新建一个事务(专门负责这个消息相关的工作),将消息副本存放在这个事务中,并将这个事务标识为这个ITC-UA“正在处理的事务”。之后进入用户回调流程。
若收到了应答消息,则在当前ITC-UA的事务列表中查找消息中指定的ToTag(事务标识)所代表的事务。如果没有找到就直接返回错误,结束函数;如果找到了这个相关的事务,则进入用户回调流程。
阶段2:
用户回调结束后,ITC-UA将析构“正在处理的事务”、清空内部的ItcMsg消息缓存。
1.6清理过期事务
在线程处理周期中,用户可以调用ItcClean()函数来清理指定ITC-UA中的事务列表。
此函数将会根据当前时间与事务创建时间的差值与预设超时时长做比较,若差值超过预设时长,则将事务从当前ITC-UA的:
1.事务索引表中删除。
2.事务内存池中释放。
1.7发送命令
调用ItcCommand()发送命令消息时,函数将会做以下操作:
构造一个ItcMsg结构体。填充ItcMsgHeader:
1.type=“命令”;
2.from=当前ITC-UA的标识;
3.fromTag=0(没有源事务);
4.to=实参中的ITC-UA标识;
5.toTag=0(没有目标事务)。
根据用户传入参数填充ItcMsgBody。
在ItcManager中查找目标ITC-UA的标识。
调用ItcPostman的发送接口,传入目标ITC-UA的标识,将ItcMsg发送到目标ITC-UA。
1.8发送匿名命令
调用ItcCommandLite()发送匿名命令时,ITC将首先检查全局公共ITC-UA是否已经被实例化。若没有,就实例化一个全局公共ITC-UA,用来做所有的匿名命令发送工作;如果已经有全局公共ITC-UA实例,则继续使用这个实例来完成下面的工作。(单例模式)
接下来会调用ItcCommand()函数来构造和发送ItcMsg到目标ITC-UA。
1.9发送请求
在ITC-UA发送请求之前,会根据用户传入参数填充一个新的ItcMsg。
1.type=“请求”;
2.from=当前ITC-UA的标识;
3.fromTag=刚创建的事务的ID;
4.to=实参中的目标ITC-UA标识;
5.toTag=0(没有目标事务)。
根据用户传入参数填充ItcMsgBody。
在ItcManager中查找目标ITC-UA的标识。
调用ItcPostman的发送接口,传入目标ITC-UA的标识,将ItcMsg发送到目标ITC-UA。
发送请求消息的大部分过程与发送命令消息一致。
有所不同的地方是,发送请求消息时会创建一个新的事务来存储此消息的副本。这样在收到应答时,就能找到之前创建的这个请求事务,方便用户进行基于事务的操作。
目前,在收到请求时,可以调用ItcResponse()直接发送应答,而不需指定应答目标。
1.10发送应答
当用户调用ItcResponse()函数发送应答消息时,ITC-UA会根据ITC-UA结构体中的currentTransactionId获取“正在处理的事务”,若获取失败,则直接返回错误。
若获取到当前正在处理的事务,会根据用户传入参数填充一个新的ItcMsg。
1.type=“应答”;
2.from=当前ITC-UA的标识;
3.fromTag=“正在处理的事务”的ID;
4.to=“正在处理的事务”中的源ITC-UA标识;
5.toTag=“正在处理的事务”中的fromTag。
根据用户传入参数填充ItcMsgBody。
在ItcManager中查找目标ITC-UA的标识(即ItcMsgHeader.to字段的值)。
调用ItcPostman的发送接口,传入目标ITC-UA的标识,将ItcMsg发送到目标ITC-UA。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (1)
1.一种Linux下线程间通信系统,其特征在于:每个线程中创建一ITC客户端,线程间通过所述ITC客户端进行通信;所述ITC包括业务层、组件层以及基础层;
所述业务层包括UserAgent以及Manager,所述UserAgent用于管理线程的对外通讯的所有发送和接收事务,所述Manager用于管理UserAgent的创建、修改以及销毁;
所述组件层包括事务组件以及传输组件,所述事务组件负责创建、修改以及销毁通讯事务,解析和封装通讯消息,维护通讯消息与通讯事务之间的对应关系;所述传输组件负责查询UserAgent地址,收发Socket数据消息;
所述基础层包括消息组件以及基础工具,所述消息组件用于解析和封装消息数据;所述基础工具包括编号组件、哈希表组件以及内存池组件;所述编号组件用于生成线程内部全局唯一的编号;所述哈希表组件用于快速索引线程内部实体;所述内存池组件用于管理内存,释放和申请内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811092291.6A CN109408248B (zh) | 2018-09-19 | 2018-09-19 | 一种Linux下线程间通信系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811092291.6A CN109408248B (zh) | 2018-09-19 | 2018-09-19 | 一种Linux下线程间通信系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109408248A true CN109408248A (zh) | 2019-03-01 |
CN109408248B CN109408248B (zh) | 2021-12-24 |
Family
ID=65465091
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811092291.6A Active CN109408248B (zh) | 2018-09-19 | 2018-09-19 | 一种Linux下线程间通信系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109408248B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867991A (zh) * | 2021-12-01 | 2021-12-31 | 北京翼辉信息技术有限公司 | 一种基于信号槽的线程间的事件处理方法、装置及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070067778A1 (en) * | 2005-08-25 | 2007-03-22 | Kimming So | System and method for communication in a multithread processor |
CN101216780A (zh) * | 2007-01-05 | 2008-07-09 | 中兴通讯股份有限公司 | 在对称多处理体系下实现多实例线程通信的方法及装置 |
CN101292226A (zh) * | 2005-10-19 | 2008-10-22 | 英特尔公司 | 线程通信和同步技术 |
US20120297371A1 (en) * | 2007-08-14 | 2012-11-22 | Bernd Greifeneder | Method and System for tracing individual Transactions at the Granularity Level of Method Calls Throughout Distributed Heterogeneous Applications without Source Code Modifications Including the Detection of Outgoing Requests |
US20160179590A1 (en) * | 2014-12-22 | 2016-06-23 | International Business Machines Corporation | Addressing for inter-thread push communication |
CN106209996A (zh) * | 2016-06-27 | 2016-12-07 | 网易(杭州)网络有限公司 | 通信处理方法和装置 |
-
2018
- 2018-09-19 CN CN201811092291.6A patent/CN109408248B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070067778A1 (en) * | 2005-08-25 | 2007-03-22 | Kimming So | System and method for communication in a multithread processor |
CN101292226A (zh) * | 2005-10-19 | 2008-10-22 | 英特尔公司 | 线程通信和同步技术 |
CN101216780A (zh) * | 2007-01-05 | 2008-07-09 | 中兴通讯股份有限公司 | 在对称多处理体系下实现多实例线程通信的方法及装置 |
US20120297371A1 (en) * | 2007-08-14 | 2012-11-22 | Bernd Greifeneder | Method and System for tracing individual Transactions at the Granularity Level of Method Calls Throughout Distributed Heterogeneous Applications without Source Code Modifications Including the Detection of Outgoing Requests |
US20160179590A1 (en) * | 2014-12-22 | 2016-06-23 | International Business Machines Corporation | Addressing for inter-thread push communication |
CN106209996A (zh) * | 2016-06-27 | 2016-12-07 | 网易(杭州)网络有限公司 | 通信处理方法和装置 |
Non-Patent Citations (4)
Title |
---|
KEITH CLARK 等: ""Multi-threading and Message Communication in Qu-Prolog"", 《HTTPS://ARXIV.ORG/PDF/CS/0404052V1.PDF》 * |
YEXZ: ""linux基础——linux线程间通信及同步机制总结"", 《HTTPS://BLOG.CSDN.NET/A987073381/ARTICLE/DETAILS/52029070》 * |
YEXZ: ""linux基础——linux进程间通信(IPC)机制总结"", 《HTTPS://BLOG.CSDN.NET/A987073381/ARTICLE/DETAILS/52006729》 * |
周昕: "《中国优秀硕士学位论文全文数据库 信息科技辑》", 15 December 2011 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867991A (zh) * | 2021-12-01 | 2021-12-31 | 北京翼辉信息技术有限公司 | 一种基于信号槽的线程间的事件处理方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109408248B (zh) | 2021-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6349333B1 (en) | Platform independent alarm service for manipulating managed objects in a distributed network management system | |
US6438608B2 (en) | Declarative message addressing | |
US6298378B1 (en) | Event distribution system for computer network management architecture | |
CN1306430C (zh) | 基于构件的用户自定义事件方法 | |
CN101179622B (zh) | 通讯系统中一种多命令的处理设备及其处理方法 | |
EP1989892B1 (en) | Communication server with a service logic execution environment | |
US6289339B1 (en) | Method and apparatus for filtering a notification message from a database | |
CN108446105B (zh) | 一种轻量级API Server开发框架及开发方法 | |
US20120066335A1 (en) | Dynamic address mapping | |
CN110321236A (zh) | 一种基于OpenDDS的远程方法调用实现方法 | |
CN109408248A (zh) | 一种Linux下线程间通信系统 | |
WO2018188381A1 (zh) | 一种软件模块间的事件路由框架及方法 | |
CN103763325B (zh) | 构建ip安防产品开发环境的方法 | |
KR100602318B1 (ko) | 고급 지능형 네트워크, 인터넷 가능 서비스 구성 요소, 외부 인터페이스를 제공하는 방법 및 머신 판독 가능 저장 장치 | |
EP2134032A1 (en) | Method, system and device for managing customer premises equipment | |
WO2007022685A1 (fr) | Procédé de réalisation du service de notification, système de gestion web distribué et dispositif de service d’envoi de notification | |
CN101150443B (zh) | 电信网络管理消息的处理方法 | |
CA2559642A1 (en) | Devices, systems and methods for network device conversion | |
JP2012528367A (ja) | データ伝送システムにおけるデータを適合するための方法及び関連システム | |
CN102244657B (zh) | 多点控制单元级联会议的注册方法及系统 | |
CN105610619B (zh) | 一种网元设备管理方法和装置 | |
CN100579038C (zh) | 一种照明设备的统一监控平台及实现方法 | |
CN106921662B (zh) | 实时流连接生命周期管理方法 | |
CN107656826B (zh) | 一种基于ipc动态维护技术的面向对象用电信息采集终端 | |
AU718930B2 (en) | Procedure for supporting the generation of an object in a computer system |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 361000 unit 1001, No.56, guanri Road, phase II, software park, Siming District, Xiamen City, Fujian Province Applicant after: Fujian Xingwang Intelligent Technology Co., Ltd Address before: 361000 unit 1001, No.56, guanri Road, phase II, software park, Siming District, Xiamen City, Fujian Province Applicant before: FUJIAN STAR-NET WISDOM TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |