一种进程间通信方法
【技术领域】
[0001]本发明属于网络通信领域,尤其涉及一种进程间通信方法。
【背景技术】
[0002]进程间通信(IPC, Interprocess Communicat1ns)就是在不同进程之间传播或交换信息,这就需要不同进程之间存在一个双方都可以访问的介质,共享内存就是用于进程之间进行通信的介质。所谓共享内存,是指同一块物理内存被映射到进程A、B各自的进程地址空间,可以被A、B进程同时访问,达到交换数据的目的。
[0003]通常使用的多进程间通信方法(信号、消息队列、共享内存、信号量、套接口等),一般如果使用阻塞方式则需要花费一个进程或线程去阻塞等待事件的发生,而如果是非阻塞则又需要使用查询的方式去反复查询事件的发生。前者会使程序进程或线程数目增多,增加程序的复杂性,而后者又会浪费额外的系统资源在查询事件的发生上。随着网络化社会的不断进步,越来越多的网络通讯工具应用到工作和生活中,比如飞信、MSN和一些企业版应用软件等。以上各种通信方式都依赖于不同架构模式,在分布式通信架构中的应用中,进程之间经常需要频繁的通信,对网络的高效、流畅、实时性要求非常高。当大业务量并发的情况下,进程之间的通信就变得缓慢、延时、数据处理超时,甚至会导致系统崩溃。
【发明内容】
[0004]本发明提供一种进程间通信方法,以解决上述问题。
[0005]一种进程间通信方法,包括以下步骤。发送端创建多个线程及不同优先级的信号,接收端创建多个线程及不同优先级的信号,所述发送端或者接收端同一优先级的信号中包括一个或多个信号;所述发送端按指定策略获取发送端共享内存中的信号,并分配发送端线程,所述发送端线程通过所述信号发送数据块到所述接收端;所述接收端按指定策略获取接收端共享内存中的信号,并分配接收端线程,所述接收端线程读取所述信号中的数据块。
[0006]相较于先前技术,根据本发明提供的进程间通信方法,发送端及接收端分别创建多个线程及不同优先级的信号,其中同一优先级的信号中包括一个或多个信号,且发送端建立与接收端的连接。通过对不同信号设定对应优先级,达到了信号资源的合理利用。发送端按指定策略获取发送端共享内存中信号,并分配发送端线程,所述发送端线程通过所述信号发送数据块到接收端。接收端按指定策略获取接收端共享内存中信号接收所述数据块,并分配接收端线程,所述接收端线程读取所述信号中的数据块。此外,所述发送端或者接收端按所述指定策略获取各自共享内存中信号,所述发送端获取的信号轮询处理待发送数据块或者所述接收端获取的信号轮询处理待接收数据块。同时避开一般方法中通信链路在阻塞方式下一条通路花费一个进程或线程的问题,降低了程序的复杂性,也不需要使用查询方式产生额外的系统开销。同时系统通过建立的控制链路,通知线程从线程内部主动结束线程,简化线程异步终止时资源清理过程,规避查询方式带来的额外系统开销。如此,大数据量并发时由多信号、多线程同时传输,大大提高了进程间通信效率。
[0007]
【具体实施方式】
步骤101:发送端创建多个线程及不同优先级的信号,接收端创建多个线程及不同优先级的信号,所述发送端或者接收端同一优先级的信号中包括一个或多个信号,且所述发送端建立与所述接收端的连接。
[0008]具体而言,发送端及接收端分别具有存放空闲信号的共享内存及存放忙碌信号的繁忙池。发送端及接收端将创建好的信号加入到各自共享内存中。所述信号分为不同优先级,信号优先级越高,对应信号承载量越大。此外,发送端可随时向接收端发起连接请求,并建立与接收端的连接。发送端及接收端分别在本地存储信号优先级与承载量对照表,所述对照表包含信号优先级、信号名称及信号承载量。所述信号优先级与承载量对照表例如下表所示。
[0009]步骤102:所述发送端按指定策略获取发送端共享内存中信号,并分配发送端线程,所述发送端线程通过所述信号发送数据块到所述接收端。
[0010]具体而言,所述发送端按指定策略获取发送端共享内存中信号的过程可以为,发送端信号发送完数据块后,所述发送端信号主动到所述发送端共享内存中报到后,发送端到自身共享内存中获取信号。于此,所述发送端根据自身对照表中不同优先级信号的承载量及数据块大小在发送端共享内存中获取相应优先级的信号,其中同一优先级的信号按照进入共享内存顺序选取或者随机选取,对此本发明不作限定。
[0011 ] 所述发送端按指定策略获取发送端共享内存中信号的过程还可以为,给发送端共享内存中信号编号,随机取一个自然数除以发送端共享内存信号个数,所得余数为所述发送端在发送端共享内存中获取的信号编号,所述发送端获取发送端共享内存中编号为所述余数的信号。发送端及接收端分别具有数据池,发送端数据池用于存放待发送数据块,接收端数据池用于存放已接收的数据块。于此,发送端可按上述任一策略获取发送端共享内存中信号,并分配发送端线程,所述发送端线程从发送端数据池中取得数据块通过所述信号发送到所述接收端。
[0012]步骤103:所述接收端按指定策略获取接收端共享内存中信号接收所述数据块,并分配接收端线程,所述接收端线程读取所述信号中的数据块。
[0013]具体而言,所述接收端在本地存储信号优先级与承载量对照表,所述接收端按指定策略获取接收端共享内存中信号的过程与发送端类似,故于此不再赘述。
[0014]举例而言,若发送端与接收端建立连接后,发送端数据池中待发送数据块a大小为50K,且发送端共享内存中包含两个高优先级信号Ρ1、ΡΓ及一个低优先级信号Ρ3’。若发送端信号发送完数据块后主动到所述发送端共享内存中报到,且发送端到自身共享内存中获取信号。所述发送端根据数据块a大小及自身存储的对照表,确定选取高优先级的信号。所述高优先级信号现包括信号Pl及P1’,发送端可按照信号Pl及ΡΓ进入共享内存的顺序或者随机选取相应信号用于传输数据块a,对于具体选取方式本发明不作限定。
[0015]实施例二
步骤201:发送端创建多个线程及不同优先级的信号,接收端创建多个线程及不同优先级的信号,且所述发送端建立与所述接收端的连接,所述发送端或者接收端同一优先级的信号中包括一个或多个信号。
[0016]具体而言,本步骤中发送端及接收端处理方式与步骤101相同,故于此不再赘述。
[0017]步骤202:所述发送端或者接收端按所述指定策略获取各自共享内存中信号,所述发送端获取的信号轮询处理待发送数据块或者所述接收端获取的信号轮询处理待接收数据块。
[0018]具体而言,所述发送端信号轮询处理待发送数据块或者所述接收端信号轮询处理待接收数据块时,所述发送端信号或者所述接收端信号根据自身优先级对应的承载量选择发送或者接收的数据块。若不同优先级的信号同时访问同一数据块,则优先选取较高优先级的信号处理所述数据块。其中,同一优先级的不同信号可按照进入共享内存顺序选取或者随机选取,对此本发明不作限定。
[0019]举例而言,若某一时刻接收端待接收数据块包括数据块b (大小为20K)及数据块c (大小为40K),若接收端按所述指定策略获取一个中优先级信号P2及一个低优先级信号P3。其中,所述指定策略的内容同步骤102中的描述。若信号P2先访问数据块b,信号P3先访问数据块C。参照步骤101中的信号优先级与承载量对照表,数据块b大小不超过信号P2最大承载量,则接收端为信号P2分配线程,所述线程通过信号P2读取数据块b。信号P3访问数据块c时,数据块c大小超过信号P3的最大承载量,则信号P3不处理数据块C。
[0020]若信号P2先访问数据块C,信号P3先访问数据块b,参照所述对照表,数据块c大小不超过信号P2最大承载量,数据块b大小不超过信号P3最大承载量,则接收端分别为信号P2及P3分配线程,与信号P2对应的线程通过信号P2读取数据块C,与信号P3对应的线程通过信号P3读取数据块b。
[0021]若信号P2及信号P3同时访问数据块b,接收端选择优先级较高的信号P2访问数据块b。根据所述对照表,数据块b大小不超过信号P2的最大承载量,接收端为信号P2分配线程,所述线程通过信号P2读取数据块b。信号P3接下来继续访问数据块c,数据块c大小超过信号P3的最大承载量,则信号P3不处理数据块C。
[0022]若信号P2及信号P3同时访问数据块C,接收端选择优先级较高的信号P2访问数据块c,数据块c大小不超过信号P2最大承载量,接收端为信号P2分配线程,所述线程通过信号P2读取数据块C。接下来信号P3访问数据块b,数据块b大小不超过信号P3最大承载量,接收端为信号P3分配线程,所述线程通过信号P3读取数据块b。于其它实施例中,若相同优先级的信号按进入对应共享内存的顺序选取,或者随机选取所述相同优先级的信号,对此本发明不作限定。
[0023]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种进程间通信方法,其特征在于包括以下步骤:发送端创建多个线程及不同优先级的信号,接收端创建多个线程及不同优先级的信号,所述发送端或者接收端同一优先级的信号中包括一个或多个信号;所述发送端按指定策略获取发送端共享内存中的信号,并分配发送端线程,所述发送端线程通过所述信号发送数据块到所述接收端;所述接收端按指定策略获取接收端共享内存中的信号,并分配接收端线程,所述接收端线程读取所述信号中的数据块。
【专利摘要】本发明属于网络通信领域,尤其涉及一种进程间通信方法,包括以下步骤:发送端创建多个线程及不同优先级的信号,接收端创建多个线程及不同优先级的信号,所述发送端或者接收端同一优先级的信号中包括一个或多个信号;所述发送端按指定策略获取发送端共享内存中的信号,并分配发送端线程,所述发送端线程通过所述信号发送数据块到所述接收端;所述接收端按指定策略获取接收端共享内存中的信号,并分配接收端线程,所述接收端线程读取所述信号中的数据块。系统通过建立的控制链路,通知线程从线程内部主动结束线程,简化线程异步终止时资源清理过程,规避查询方式带来的额外系统开销。如此,大数据量并发时由多信号、多线程同时传输,大大提高了进程间通信效率。
【IPC分类】G06F9/54
【公开号】CN104899105
【申请号】CN201410077942
【发明人】金飞, 葛菲
【申请人】安徽皖新金智教育科技有限公司
【公开日】2015年9月9日
【申请日】2014年3月5日