一种Linux下线程间通信系统技术方案

技术编号:20484218 阅读:19 留言:0更新日期:2019-03-02 18:42
本发明专利技术提供一种Linux下线程间通信系统,每个线程中创建一ITC客户端,线程间通过ITC客户端进行通信。ITC系统负责管理线程间通信的会话、事务和消息,它包括业务层、组件层以及基础层;应用程序使用ITC系统,可极大降低线程间通信会话和事务的维护成本。

【技术实现步骤摘要】
一种Linux下线程间通信系统
本专利技术涉及一种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-ThreadCommunication,线程间通讯模块。b.UA:ITCUserAgent,ITC用户代理,负责一个线程的对外通讯的所有发送和接收事务。c.MANAGER:ITCManager负责登记和管理所有UA,为UA提供消息的路由信息。d.消息类型:请求、应答和命令。一个请求对应一个应答;命令无需应答。2.系统框架如图1所示,ITC通信框架:每个线程创建一个UA,使用线程名作为UA唯一标识,向MANAGER登记,UA通过线程名来指定请求和响应消息的目的地。如图2所示,ITC中UA结构a.transaction:事务组件,负责管理消息事务。b.postmain:传输组件,负责管理线程消息连接,即UA地址信息(如:管道等)。c.msg:消息组件,负责解析和封装消息数据。d.id:编号组件,负责生成线程内部全局唯一的编号(标识:事务等)。e.hashtable:哈希表组件,负责快速索引线程内部实体(如:事务等)。f.memorypool:内存池组件,负责管理UA内存,快速释放和申请内存。如图3所示,ITC中UA管理:线程UA创建后需注册到Manager,登记UA地址信息。某个线程需要发送消息时,可以通过Manager提供的API接口获取目标线程的UA地址。如图4所示,ITC数据流:线程A向B发送请求,B回复应答给Aa.线程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和commandb.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结构体参数。随后,调用I本文档来自技高网...

【技术保护点】
1.一种Linux下线程间通信系统,其特征在于:每个线程中创建一ITC客户端,线程间通过所述ITC客户端进行通信;所述ITC包括业务层、组件层以及基础层;所述业务层包括UserAgent以及Manager,所述UserAgent用于管理线程的对外通讯的所有发送和接收事务,所述Manager用于管理UserAgent的创建、修改以及销毁;所述组件层包括事务组件以及传输组件,所述事务组件负责创建、修改以及销毁通讯事务,解析和封装通讯消息,维护通讯消息与通讯事务之间的对应关系;所述传输组件负责查询UserAgent地址,收发Socket数据消息;所述基础层包括消息组件以及基础工具,所述消息组件用于解析和封装消息数据;所述基础工具包括编号组件、哈希表组件以及内存池组件;所述编号组件用于生成线程内部全局唯一的编号;所述哈希表组件用于快速索引线程内部实体;所述内存池组件用于管理内存,释放和申请内存。

【技术特征摘要】
1.一种Linux下线程间通信系统,其特征在于:每个线程中创建一ITC客户端,线程间通过所述ITC客户端进行通信;所述ITC包括业务层、组件层以及基础层;所述业务层包括UserAgent以及Manager,所述UserAgent用于管理线程的对外通讯的所有发送和接收事务,所述Manager用于管理UserAgent的创建、修改以及销毁;所述组件层包括事务组件以及传输组件,所述事务组件负责创建、修...

【专利技术属性】
技术研发人员:郑政晶陈锦辉
申请(专利权)人:福建星网智慧科技股份有限公司
类型:发明
国别省市:福建,35

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

1