CN110399229A - 进程间的通信方法、装置、***、介质及终端 - Google Patents
进程间的通信方法、装置、***、介质及终端 Download PDFInfo
- Publication number
- CN110399229A CN110399229A CN201810380885.0A CN201810380885A CN110399229A CN 110399229 A CN110399229 A CN 110399229A CN 201810380885 A CN201810380885 A CN 201810380885A CN 110399229 A CN110399229 A CN 110399229A
- Authority
- CN
- China
- Prior art keywords
- section key
- message content
- shared section
- publishing side
- address
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 877
- 230000008569 process Effects 0.000 title claims abstract description 812
- 238000004891 communication Methods 0.000 title claims abstract description 121
- 230000005540 biological transmission Effects 0.000 claims abstract description 33
- 238000003860 storage Methods 0.000 claims description 58
- 239000004744 fabric Substances 0.000 claims description 10
- 238000012217 deletion Methods 0.000 claims description 8
- 230000037430 deletion Effects 0.000 claims description 8
- 230000001360 synchronised effect Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 230000002452 interceptive effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000001815 facial effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012935 Averaging Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 235000015170 shellfish Nutrition 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
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/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种进程间的通信方法、装置、介质、***及终端,其中,该方法包括:接收订阅端进程发送的套接字连接请求,根据所述套接字连接请求与所述订阅端进程建立套接字连接;将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;将所述地址通过所述套接字传输至所述订阅端进程,以使所述订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量,实现消息内容的同步。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种进程间的通信方法、一种进程间的通信装置、一种进程间的通信***、一种计算机存储介质及一种终端。
背景技术
进程是操作***进行资源分配和调度的基本单位,每个进程都拥有自己独立的资源,为了使进程间能够相互访问资源并协调工作,需要在进程间进行通信。进程间通信(Interprocess Communications,IPC)是指在不同进程之间传播或交换消息。实践发现,目前的进程间通信方案存在消息内容无法在进程之间实现同步,需要对操作***内核进行频繁访问而占用大量处理资源,影响通信延迟和吞吐量等问题,因此,如何能够较好的实现进程间通信成为一个重要的研究课题。
发明内容
本发明实施例所要解决的技术问题在于,提供一种进程间的通信方法、装置、介质、***及终端,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量,实现消息内容的同步。
一方面,本发明实施例提供了一种进程间的通信方法,该方法包括:
接收订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
根据所述套接字连接请求与所述订阅端进程建立套接字连接;
将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;
将所述地址通过所述套接字传输至所述订阅端进程,以使所述订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
一方面,本发明实施例提供了一种进程间的通信方法,该方法包括:
向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址;
根据所述地址从所述共享内存中读取所述目标消息内容。
一方面,本发明实施例提供了一种进程间的通信装置,该装置包括:
连接单元,用于接收订阅端进程发送的套接字连接请求,根据所述套接字连接请求与所述订阅端进程建立套接字连接;所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的。
写入单元,用于将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址。
传输单元,用于将所述地址通过所述套接字传输至所述订阅端进程,以使所述订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
一方面,本发明实施例提供了一种进程间的通信装置,该装置包括:
连接单元,用于向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的。
接收单元,用于接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址。
读取单元,用于根据所述地址从所述共享内存中读取所述目标消息内容。
一方面,本发明实施例提供了一种进程间的通信***,该***包括发布端进程、订阅端进程及共享内存区:
所述发布端进程,用于接收所述订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;根据所述套接字连接请求与所述订阅端进程建立套接字连接;将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;将所述地址通过所述套接字传输至所述订阅端进程。
所述订阅端进程,用于向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;接收所述发布端进程通过所述套接字发送的地址,根据所述地址从所述共享内存中读取所述目标消息内容。
所述共享内存区,用于存储所述发布端进程写入的所述目标消息内容。
一方面,本发明实施例提供了一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或一条以上第一指令,所述一条或一条以上第一指令适于由处理器加载并执行如下方法:
接收订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
根据所述套接字连接请求与所述订阅端进程建立套接字连接;
将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;
将所述地址通过所述套接字传输至所述订阅端进程,以使所述至少一个订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
或者,所述计算机存储介质存储有一条或一条以上第二指令,所述一条或一条以上第二指令适于由处理器加载并执行如下方法:
向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址;
根据所述地址从所述共享内存中读取所述目标消息内容。
一方面,本发明实施例提供了一种终端,该终端包括:处理器,适于实现一条或一条以上指令;以及,计算机存储介质,所述计算机存储介质存储有一条或一条以上第一指令,所述一条或一条以上第一指令适于由处理器加载并执行如下方法:
接收订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
根据所述套接字连接请求与所述订阅端进程建立套接字连接;
将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;
将所述地址通过所述套接字传输至所述订阅端进程,以使所述至少一个订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
或者,所述计算机存储介质存储有一条或一条以上第二指令,所述一条或一条以上第二指令适于由处理器加载并执行如下方法:
向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址;
根据所述地址从所述共享内存中读取所述目标消息内容。
本发明实施例中,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种进程间的通信***的架构示意图;
图2是本发明实施例提供的一种进程间的通信方法的流程示意图;
图3是本发明实施例提供的另一种进程间的通信方法的流程示意图;
图4是本发明实施例提供的又一种进程间的通信方法的流程示意图;
图5是本发明实施例提供的又一种进程间的通信方法的流程示意图;
图6是本发明实施例提供的一种共享内存区的示意图;
图7是本发明实施例提供的又一种进程间的通信方法的流程示意图;
图8是本发明实施例提供的一种进程间的通信装置的结构示意图;
图9是本发明实施例提供的另一种进程间的通信装置的结构示意图;
图10是本发明实施例提供的一种终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
进程是计算机中的程序的一次运行活动;换句话说,进程是程序的实体,是正在运行的程序的实例;例如:终端中正在运行即时通信应用程序,那么在该终端中可查看到已启动并正在运行的该即时通信应用程序的进程。终端可同时运行多个应用程序,因此终端中会同时存在多个应用程序的进程;在某些场景下,终端中的多个进程之间存在通信需求,例如:终端中同时运行有摄像进程和人脸识别进程,那么,在人体识别场景中,需要在摄像进程与人脸识别进程之间进行通信,由摄像进程提供拍摄到的人脸图像,由人脸识别进程获得该人脸图像以进行人脸识别处理。本发明实施例中,发布端进程是指通过发布消息来提供服务的进程,订阅端进程是指订阅消息服务的进程;在上述人脸识别场景中,摄像进程作为发布端进程,人脸识别进程作为订阅端进程。目前,进程间的通信方法主要包括:基于套接字的进程间通信方法、基于消息队列的进程间通信方法及基于共享内存区的进程间通信方法,下面将对几种方法进行简要介绍:
(1)基于套接字的进程间通信方法:此方法的主要优势在于可以实现与网络套接字接口基本兼容,进行通信的两进程之间不需要关心对方进程与自身是在同一台计算机中,还是在同一个网络环境中,且能够提供统一的软件模块通信接口。但也存在以下不足:首先,套接字通信是一对一的,要实现M对N的通信,则需要M×N对套接字,占用大量***资源;其次,基于套接字的进程间通信方法需要发布端进程将消息内容拷入到缓冲区,然后从缓冲区将消息内容拷入到内核中,订阅端进程需要将消息内容从内核中将消息内容拷入到缓冲区,然后从缓冲区将该消息内容拷出,频繁地拷贝消息内容不仅占用处理器资源,还严重影响消息传输延迟和消息传输吞吐量。
(2)基于消息队列的进程间通信方法:相比基于套接字的进程间通信方法,基于消息队列的进程间通信方法可以实现字符流通信,能够保持消息边界。但是在实现进程间通信的过程中仍需要将消息内容在缓冲区-内核-缓冲区之间进行频繁地拷贝。另外,虽然消息队列支持多对多进程间通信,但多个订阅端进程实际上需要争抢消息内容,即一个订阅端进程读取某条消息内容后,该消息内容就不能被其他订阅端进程读取,因此并不适合消息内容发布的模式。
(3)基于共享内存区的进程间通信方法:通过提供一个多进程可访问的共享内存区以实现多对多的进程间通信。可减少消息内容的拷贝次数,降低消息内容的传输时延。但基于共享内存区的进程间通信方法也存在不足,主要在于缺乏同步机制,即发布端进程缺乏有效方法通知订阅端进程有新消息内容写入到共享内存区。
综上,基于套接字的进程间通信方法和基于消息队列的进程间通信方法均有较好的同步机制,但消息内容需要在缓冲区-内核-缓冲区进行频繁地拷贝,增加了操作***的资源开销,并导致消息内容的传输时延较大,降低消息内容传输的吞吐量;而基于共享内存区的进程间通信方法中消息内容虽然不需要拷入到内核及缓冲区中,但是缺乏同步机制。可见,上述单一方式的各种进程间通信方法,要么存在操作***的资源开销较大,消息内容的传输时延较高,消息内容传输吞吐量较低等问题,要么存在缺乏同步机制的问题。这些问题产生的主要原因是由于应用场景的变化所导致的。早期的进程间通信更多考虑一对一通信(即一个发布端进程对一个订阅端进程)需求,进程间交互的消息内容简单单一;因此上述单一方式的进程间通信方法更适用于早期这种复杂度低、吞吐量低的简单通信场景中。但是,随着软件***复杂程度的提升,软件模块间以进程形式隔离的情况下,产生了更多更复杂的通信需求,如在一对一通信场景中要求交互更多更复杂的消息内容,或者要求实现多对多通信等等;举例来说,机器人***场景下设有多个高清摄像头,每个高清摄像头拍摄的图像数据可以被人脸识别、人体识别、手势识别、姿态识别、物体识别等多个软件模块对应的进程所获取;每个高清摄像头均是一个发布端进程,而各个软件模块对应的进程则是一个订阅端进程;该机器人***场景下即要求实现高吞吐量的多对多通信。上述单一方式的各种进程间通信方案已无法适应于这种复杂的通信场景,无法实现高吞吐量的通信场景。
基于此,本发明实施例提供一种进程间的通信方案,具体为:在发布端进程需要发布消息内容时,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例灵活兼容多种主流的进程间通信技术,结合共享内存和套接字的优势实现进程间通信。首先,使用共享内存区来进行消息内容的存储,这样,消息内容仅需要在共享内存区中进行拷贝,而不需要在内核及缓冲区进行拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延;其次,发布端进程与订阅端进程之间建立套接字连接,发布端进程在发布消息内容之后,可通过套接字实时地将消息内容在共享内存区的地址共享给订阅端进程,这样,订阅端进程可以实时地获取到发布端进程写入的消息内容,从而实现了订阅端进程和发布端进程之间的消息内容同步。综上所述,本发明实施例解决了单一方式的进程间通信方法所存在的问题,有效减少了操作***的资源开销,提升消息内容的传输时延和传输吞吐率,解决了进程之间的消息同步问题,更适应于复杂度高、吞吐量高的通信场景。
本发明实施例中,发布端进程是指发布消息内容的进程,订阅端进程是指读取消息内容的进程。发布端进程和订阅端进程是相对的,即在某些场景下,同一进程既可以作为发布端进程发布消息内容,也可以作为订阅端进程读取其他进程发布的消息内容;举例来说,在人脸识别进行终端开机的场景下,首先,摄像进程发布图像数据(即消息内容),人脸识别进程读取摄像进程发布的图像数据,并根据图像数据进行人脸识别,得到识别结果;在此情况下,摄像进程作为发布端进程,人脸识别进程作为订阅端进程;其次,人脸识别进程发布识别结果,开机进程读取该识别结果并控制终端进行开机。在此情况下,人脸识别进程作为发布端进程,开机进程作为订阅端进程。可见,在上述场景中,人脸识别进程既作为订阅端进程,又作为发布端进程。需要说明的是,本发明实施例中,同一个订阅端进程可以订阅多个发布端进程所发布的消息内容,同一个发布端进程所发布的消息内容可以被多个订阅端订阅。
基于上述描述,本发明实施例提供一种进程间的通信***,该通信***可以被设置于终端的操作***中,此处的终端至少包括存储器、显示器或处理器。请参见图1,该通信***包括至少一个发布端进程及至少一个订阅端进程。图1以两个为例,其中的发布端进程包括发布端进程P1和发布端进程P2,其中的订阅端进程包括订阅端进程S1和订阅端进程S2。当各进程在操作***中被启动后,可通过调用终端的任务管理器查看已启动的发布端进程和订阅端进程。
该通信***还包括共享内存区10。共享内存区是指在多处理器的计算机***中,可以被不同中央处理器访问的大容量内存。图1所示的共享内存区10的存储空间可以是从终端的存储器中分配的,共享内存区的容量(即存储空间的存储量大小)可由终端根据吞吐量自动设置,也可以由用户手动设置。共享内存区10相当于发布端进程与订阅端进程进行交互信息的中间介质;具体为:发布端进程P1或/和发布端进程P2可以将需要发布的消息内容写入到共享内存区10,订阅端进程S1或/和订阅端进程S2可以从共享内存区10中读取发布端进程写入的消息内容。
在一种实施方式中,图1所示的通信***能够应用于一对一通信场景;所述一对一通信场景是指在一个发布端进程与一个订阅端进程之间进行通信的场景。在一对一进程间通信场景中,下面以发布端进程P1和订阅端进程S1之间的通信为例,该通信***的工作原理大致包括:消息内容的发布过程和消息内容的读取过程。如图2所示,该消息内容的发布过程包括:
S11、发布端进程初始化。
发布端进程P1初始化包括:发布端进程P1处理订阅端进程S1的套接字连接请求,和尝试打开共享内存区。为了不影响发布端进程P1发布消息内容,可以由发布端进程P1的独立的线程来处理订阅端进程S1的套接字连接请求,即独立的线程根据套接字连接请求建立与订阅端进程S1的套接字连接,并对该共享内存区执行打开操作,若成功打开该共享内存区,则等待写入消息内容,若打开失败,则新建共享内存区。
S12、发布端进程发布目标消息内容。
发布端进程P1发布目标消息内容包括:在共享内存区为该目标消息内容分配空间,若分配成功,则在该共享内存区写入消息内容,并获取该消息内容的地址,通过套接字将该消息内容在共享内存中的地址发送至订阅端进程S1。
S13、发布端进程退出。
发布端进程P1在写入目标消息内容后可以退出共享内存区,退出共享内存区包括:检测是否需要清除共享内存区,具体的,发布端进程P1检测当前是否存在其他进程(包括发布端进程或订阅端进程)已打开且未退出共享内存区;若存在,表明有进程正在使用共享内存区,则不清除共享内存区所存储的所有消息内容;若不存在,表明当前没有进程在使用共享内存区,则可清除共享内存区所存储的所有消息内容,以释放共享内存区的存储空间。
如图3所示,消息内容的读取过程包括:
S21、订阅端进程初始化。
订阅端进程S1初始化包括:订阅端进程S1向发布端进程P1发送套接字连接请求,以建立与发布端进程P1的套接字连接。建立套接字连接操作可以通过通信***的中心进程来实现,也可以通过本地套接字路径、网络套接字端口的连接规则来实现,本发明对此不限定。
举例来说,如果通信***中订阅端进程在发布端进程之前启动,则发布端进程可以通过本地套接字路径向各个订阅端进程发送广播消息,该广播消息包括发布端进程P1的标识和发布端进程P1的服务描述信息,服务描述信息用于描述该发布端进程P1能够提供什么样的消息内容。订阅端进程S1根据发布端进程发布的广播消息判断是否订阅该发布端进程P1发布的消息内容,若确定订阅,则向发布端进程P1发送套接字连接请求,该套接字连接请求携带发布端进程P1的标识和订阅端进程S1的标识,发布端进程P1根据该套接字连接请求建立与该订阅端进程S1建立套接字连接。
S22、订阅端进程读取目标消息内容。
在套接字连接建立后,订阅端进程S1可以接收发布端进程通过套接字发送的地址,打开共享内存区,并根据地址在共享内存区读取该目标消息内容。进一步,可以将目标消息内容作为参数调用订阅端进程S1中已注册的回调函数,或者,也可以将该目标消息内容的地址作为参数调用回调函数,以便订阅端进程S1可以根据回调函数实现相应的功能。
S23、订阅端进程退出。
在读取目标消息内容后可以退出共享内存区,并检测是否需要清除共享内存区,具体的,订阅端进程S1检测当前是否存在其他进程(包括发布端进程或订阅端进程)已打开且未退出该共享内存区,若存在,表明当前有进程正在使用共享内存区,则不清除共享内存区所存储的所有消息内容;若不存在,表明当前没有进程使用共享内存区,则可清除共享内存区所存储的所有消息内容,以释放共享内存区的存储空间。
上述一对一进程间通信场景中,发布端进程只需要将消息内容写入到共享内存区,不需要将消息内容拷贝至操作***的内核及缓冲区,减少消息内容的发布过程中消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
在另一种实施方式中,图1所示的通信***能够应用于多对多通信场景;所述多对多通信场景是指在多个发布端进程与多个订阅端进程之间进行通信的场景。在多对多进程间通信场景中,下面以发布端进程P1、发布端进程P2和订阅端进程S1、订阅端进程S2为例,该通信***的工作原理同样包括:消息内容的发布过程和消息内容的读取过程。
在消息发布过程中,发布端进程P1分别建立与订阅端进程S1、订阅端进程S2的套接字连接;发布端进程P1可以对共享内存区执行打开操作,若成功打开该共享内存区,且当前需要发布目标消息内容D,发布端进程P1可以为该目标消息内容D在共享内存区分配存储空间;若分配成功,则表明该共享内存区具备存储资源,将该目标消息内容D写入在共享内存区中,并将该目标消息内容D在共享内存区的地址通过套接字发送至订阅端进程S1、订阅端进程S2。同样,发布端进程P2建立与订阅端进程S1、订阅端进程S2的套接字连接,发布端进程P2可以对共享内存区执行打开操作,若成功打开该共享内存区,且当前需要发布目标消息内容E,发布端进程P2可以为该目标消息内容E在共享内存区分配存储空间;若分配失败,则删除该共享内存区的已有消息内容,例如删除被访问次数最少的消息内容或删除建立时间最早的消息内容;在获得该目标消息内容E在共享内存区分配存储空间后,将该目标消息内容E写入在共享内存区中,并将该目标消息内容E在共享内存区的地址通过套接字发送至订阅端进程S1、订阅端进程S2。
在消息读取过程中,订阅端进程S1可以向发布端进程P1、发布端进程P2发送套接字连接请求,以建立订阅端进程S1与发布端进程P1、发布端进程P2的套接字连接,并接收发布端进程P1及发布端进程P2通过套接字发送的地址;订阅端进程S1可以打开共享内存区,并根据发布端进程P1发送的地址从共享内存区读取消息内容D,并根据发布端进程P2发送的地址从共享内存区读取消息内容E。同样,订阅端进程S2可以向发布端进程P1、发布端进程P2发送套接字连接请求,以建立订阅端进程S2与发布端进程P1、发布端进程P2的套接字连接,并接收发布端进程P1及发布端进程P2通过套接字发送的地址,订阅端进程S2打开共享内存区,并根据发布端进程P1发送的地址从共享内存区读取消息内容D,并根据发布端进程P2发送的地址从共享内存区读取消息内容E。若打开失败,表明共享内存区不存在可读取的消息内容,则放弃读取消息内容。
上述多对多进程间通信场景中,各发布端进程将需要发布的消息内容写入到共享内存区,并通过套接字将消息内容在共享内存区的地址传输至各订阅端进程,各订阅端进程根据地址从共享内存区读取消息内容;这样,不需要将消息内容在内核及缓冲区进行频繁拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并且,通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
基于上述的进程间的通信***的实施例的描述,本发明实施例提供一种进程间的通信方法,请参见图4,该进程间的通信方法可应用于图1所示的进程间的通信***;本实施例中,发布端进程表示为P1,订阅端进程表示为S1;该进程间的通信方法可包括以下步骤S101-S105。
S101、订阅端进程向发布端进程发送套接字连接请求。
S102、发布端进程根据套接字连接请求建立与订阅端进程的套接字连接。
步骤S101~S102中,为了使发布端进程P1与订阅端进程S1可以交互信息,可以建立布端进程P1与订阅端进程S1建立套接字连接;具体的,可以通过广播消息的方式或通过中心进程协调的方式实现发布端进程与订阅端进程建立套接字连接。
在一种实施方式中,若通过广播消息的方式实现发布端进程P1与订阅端进程S1建立套接字连接,则步骤S101~S102包括步骤S31~S34:
S31、发布端进程P1发送广播消息,该广播消息包括发布端进程P1的标识和发布端进程P1的服务描述信息,服务描述信息用于描述该发布端进程P1能够提供什么样的消息内容。
S32、订阅端进程S1通过发布端进程P1的广播消息判断是否需要订阅该发布端进程P1发布的消息内容。
S33、若确定需要订阅该发布端进程P1发布的消息内容,则向发布端进程P1发送套接字连接请求,该套接字连接请求携带发布端进程P1的标识和订阅端进程S1的标识。
S34、发布端进程P1根据该套接字连接请求建立与该订阅端进程S1建立套接字连接。
在步骤S31~S34中,在发布端进程和订阅端进程都启动后,发布端进程P1可以广播消息,订阅端进程S1可以根据广播消息中的服务描述信息确定该发布端进程P1可以提供什么样的消息内容,该服务描述信息可包括消息类型,如图像类、文本类或视频类;还可包括消息主题,如人脸图像、人脸视频等等。进一步,根据服务描述信息确定是否需要订阅发布端进程P1发布的消息内容,若确定需要订阅,则向发布端进程P1发送携带发布端进程P1的标识和订阅端进程S1的标识的套接字连接请求,发布端进程P1根据该套接字连接请求建立与该订阅端进程S1建立套接字连接。
另一种实施方式中,若通过中心进程协调方式实现发布端进程与订阅端进程建立套接字连接,则步骤S101~S102包括步骤S41~S42:
S41、发布端进程P1可以将发布端进程P1的标识及发布端进程P1的服务描述信息发送给中心进程;订阅端进程S1可以将订阅端进程S1的标识及订阅需求发送给中心进程;中心进程可以根据接收到的内容进行配对,例如:中心进程发现发布端进程P1提供的消息内容刚好满足订阅端S1的订阅需求,那么,中心进程可以将订阅端进程S1的标识发送给发布端进程P1,同时把发布端进程P1的标识发送给订阅端进程S1。
S42、发布端进程P1或订阅端进程S1依据从中心进程所获得的标识建立二者之间的套接字连接。
S103、发布端进程将需要发布的目标消息内容写入至共享内存区,并获取该目标消息内容在该共享内存区中的地址。
发布端进程P1可以将需要发布的目标消息内容写入到共享内存区;该写入过程可包括:①发布端进程P1检测需要发布的目标消息内容的数据量是否大于预设数量值;此处的预设数量值可以根据实际需要进行设定;②若大于预设数量值,表明需要发布的目标消息内容的数据量较大,则可以对该需要发布的目标消息内容进行打包处理,将打包处理后的目标消息内容写入到该共享内存区;③若小于或等于预设数量值,表明需要发布的目标消息内容的数据量较小,则可以直接将目标消息内容写入到该共享内存区。在该目标消息内容写入到共享内存区后,发布端进程P1获取该目标消息内容在该共享内存区的地址。
S104、发布端进程将该地址通过该套接字传输至该订阅端进程。
为了实现订阅端进程S1与订阅发布端进程P1之间的消息同步,发布端进程P1可以将目标消息内容在共享内存区的地址通过套接字传输至该订阅端进程S1;那么,订阅端进程S1接收到发布端进程P1通过套接字传输的信息,即可及时获知发布端进程P1发布了新的消息内容。
S105、订阅端进程根据所述地址从共享内存区中读取该消息内容。
订阅端进程S1通过套接字接收发布端进程P1发送的目标消息内容在共享内存区中的地址;当订阅端进程S1需要读取发布端进程P1发布的目标消息内容时,可以根据该地址从共享内存区10中读取该目标消息内容。一种实施方式中,如果共享内存区存储的是经打包处理后的目标消息内容,那么订阅端进程S1的读取过程可包括:①根据地址从共享内存区中读取打包处理后的目标消息内容;②对打包处理后的目标消息内容进行解包处理得到订阅端进程S1需要的目标消息内容。另一种实施方式中,如果共享内存区存储的是未经打包处理后的目标消息内容,订阅端进程S1可以根据该地址直接从该共享内存区中读取所需要的目标消息内容。
本发明实施例中,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
基于上述进程间的通信***及进程间的通信方法的实施例的描述,本发明实施例提供另一种进程间的通信方法,请参见图5,该进程间的通信方法可应用于图1所示的进程间的通信***,本实施例中,发布端进程表示为P1,订阅端进程表示为S1;该进程间的通信方法包括以下步骤S201-S208:
S201、发布端进程与订阅端进程建立套接字连接,具体实现过程可参见图4所示实施例中的步骤S101~S102。
为了使发布端进程P1与订阅端进程S1可以交互信息,可以建立布端进程P1与订阅端进程S1建立套接字连接。具体的,可以通过广播消息的方式或通过中心进程协调的方式实现发布端进程与订阅端进程建立套接字连接。
S202、发布端进程判断该共享内存区是否具备存储资源,若具备,则表明共享内存区具备存储目标消息内容的能力,转入执行步骤S203,若不具备,则表明共享内存区不具备存储目标消息内容的能力。
发布端进程判断该共享内存区是否具备存储资源包括步骤S51~S54:
S51、对该共享内存区执行打开操作。
S52、若成功打开所述共享内存区,检测该共享内存区是否能够为该目标消息内容分配存储空间。
S53、若共享内存区能够为该目标消息内容分配存储空间,则确认该共享内存区具备存储资源。
S54、若未成功打开所述共享内存区,则新建具备存储资源的共享内存区。
在步骤S51~S54中,共享内存区具备存储资源是指:成功打开共享内存区,且该共享内存区是能够为目标消息内容分配存储空间;共享内存区不具备存储资源是指:未能够成功打开共享内存区,或能够成功打开共享内存区,但该共享内存区未能够为该目标消息内容分配存储空间。其中,若已经建立共享内存区,则发布端进程P1可以成功打开共享内存区,若未建立共享内存区,则打开失败;因此,若打开成功,可以检测该共享内存区是否能够为该目标消息内容分配存储空间;若打开失败,则可以新建具备存储资源的共享内存区。若该共享内存区的剩余存储空间容量大于或等于该目标消息内容的数据量(即长度),则发布端进程P1确定共享内存区能够为该目标消息内容分配存储空间,否则,确定不能为该目标消息内容分配存储空间。
S203、若具备存储资源,发布端进程将该第一引用计数增加预定步长,并获取该消息队列锁的状态,该状态包括空闲状态或占用状态。
若共享内存区具备存储资源,表明该共享内存区的剩余存储空间容量大于或等于该目标消息内容的数据量,共享内存区具备存储目标消息内容的能力,可在共享内存区写入该目标消息内容。本发明实施例中,共享内存区采用消息队列存储消息内容,该共享内存包括第一引用计数及消息队列锁;第一引用计数的用于指示成功打开且未退出共享内存区的发布端进程和订阅端进程的数量;也就是说,若第一引用计数的值为初始值,则表明不存在进程成功打开且未退出共享内存区,也表明不存在发布端进程和订阅端进程使用该共享内存区;若第一引用计数的值不为初始值,则第一引用计数用于指示成功打开且未退出共享内存区的发布端进程和订阅端进程的数量,也表明存在发布端进程和订阅端进程使用该共享内存区。此处,初始值可以根据实际需要进行设定,例如为0、1等等。在将该目标消息写入到共享内存区时,发布端进程P1将该第一引用计数增加预定步长,预定步长也可以根据实际需要进行设定,例如为1、2等等。以初始值为0,预定步长为1为例;共享内存区未被任何进程打开,共享内存区的第一引用计数为初始值;发布端进程P1打开共享内存区时,将第一引用计数加1,则第一引用计算的值变为1。
为了便于对消息队列进行有序管理,可以设置同一时间仅允许一个进程对消息队列进行编辑操作,此处编辑操作包括:写操作、新增节点操作或删除节点操作等等;此设置可通过消息队列锁来实现。消息队列锁用于锁定在共享内存区的编辑操作的权限,也就是说,若某个发布端进程获取并占用该共享内存区10的消息队列锁,此时消息队列锁处于占用状态,那么该发布端进程可获得在该共享内存区10的编辑操作权限,可以向共享内存区写入消息内容;此时其他发布端进程就不能对共享内存区进行编辑操作;只有在该消息队列锁被释放后,被释放的消息队列锁入于空闲状态,其他发布端进程才能通过获取并占用该消息队列锁来获得在该共享内存区10的编辑操作权限。共享内存区还可以包括消息队列头结点,用于记录消息队列中的消息内容的状态;此处,消息内容的状态包括具备消息内容状态和不具备消息内容状态;其中,具备消息内容状态是指该消息队列中已经写入消息内容;不具备消息内容状态是指该消息队列中未写入消息内容。进一步,若该消息内容的状态为具备消息内容状态,则消息队列头结点还可以用于记录写入的各个消息内容的操作信息(如被读取的次数)。进一步,该消息队列可以包括至少一个消息节点,消息节点包括第二引用计数、用于存储消息内容的数据结构以及配置信息。可以采用链表(如单循环链表或双向循环链表)或数组等数据结构建立共享内存区的消息队列,若采用链表(如单循环链表或双向循环链表)的方式建立共享内存区的消息队列,则配置信息包括链表配置信息;若采用数组的方式建立消息队列,则配置信息包括数组配置信息。其中,第二引用计数用于指示当前在读取该消息节点中的消息内容的订阅端进程的数量,数组配置信息和链表配置信息可以记录消息队列的出口和入口,消息节点包括的消息内容是指发布端进程写入的消息内容。
以采用链表的方式建立共享内存区的消息队列为例;在某个时刻该共享内存区的状态如图6所示,该共享内存区10包括消息节点1、消息节点2及消息节点3;其中,消息节点1中的第二引用计数的值为0,表明当前不存在订阅端进程读取消息节点1中的消息内容A,消息节点2中的第二引用计数的值为1,表明当前存在一个订阅端进程读取消息节点2中的消息内容B,消息节点3中的第二引用计数的值为2,表明当前存在2个订阅端进程读取消息节点3中的消息内容C。共享内存区10的第一引用计数的值为5,表明当前一共存在5个进程成功打开且未退出共享内存区10。由上述各个消息节点的第二引用计数可知,当前一共存在三个订阅端进程在读取消息内容,由于只有订阅端进程打开共享内存区后,才能读取到共享内存区中的消息内容,因此,当前存在3个订阅端进程打开且未退出共享内存区,进而可知,当前存在2个发布端进程打开且未退出共享内存区。
步骤S202中,若共享内存区不具备存储资源,进一步共享内存区不能为该目标消息内容分配存储空间,表明共享内存区的剩余存储空间容量小于目标消息内容的数据量,一种可行的实施方式中,还可以对该共享内存区进行空间释放操作,以便可以将该目标消息内容写入到该共享内存区。对该共享内存区进行空间释放操作的过程可以包括以下步骤S61~S62:
S61、获取该消息队列中建立时间最早的消息节点。
S62、若该建立时间最早的消息节点的第二引用计数的值为初始值,删除该建立时间最早的消息节点。
在步骤S61~S62中,在该共享内存区不能为该目标消息内容分配存储空间时,发布端进程P1可以释放建立时间最早的消息节点;具体的,获取该消息队列中建立时间最早的消息节点,若该建立时间最早的消息节点的第二引用计数的值为初始值,表明当前不存在订阅端进程在读取该建立时间最早的消息节点,可以删除该建立时间最早的消息节点,在删除该建立时间最早的消息节点后,若共享内存区中还是不能为该目标消息内容分配存储空间,则可以获取下一个建立时间最早的消息节点,循环执行步骤S61~S62以删除消息节点,直到共享内存区中能为该目标消息内容分配存储空间时结束。若该建立时间最早的消息节点的第二引用计数的值不为初始值,表明当前存在订阅端进程在读取该建立时间最早的消息节点,则发布端进程P1可以放弃向共享内存区写入消息,或者等待可以该建立时间最早的消息节点的第二引用计数的值为初始值时,删除该建立时间最早的消息节点。
其中,第二引用计数的值为初始值用于指示当前不存在订阅进程读取该消息节点中的消息内容,初始值可以是零,也可以是其他值。
举例来说,在该共享内存区不能为该目标消息内容分配存储空间时,如图6所示,获取到的建立时间最早的消息节点为消息节点1(由于消息队列为先入先出队列,因此消息队列中的尾节点1为最早进入消息队列中的节点,即消息节点1为建立时间最早的消息节点)。消息节点1的第二引用计数为0,即消息节点的第二应用计数为初始值,可以将消息节点1删除,若消息节点1被删除后,发布端进程P1仍不能够为该目标消息内容分配存储空间,发布端进程P1可以获取下一个最早建立的消息节点(即消息节点2),由于消息节点2的第二引用计数不为初始值,则放弃向共享内存区写入消息内容。
S204、若该消息队列锁处于空闲状态,则发布端进程获取该消息队列锁以获得该共享内存区的写操作权限。
若该消息队列锁处于空闲状态,表明当前没有发布端进程P1向共享内存区中写消息内容,发布端进程P1能够向共享内存区中写入消息内容,为了避免发布端进程P1在写入消息内容的过程中,其他发布端进程也向共享内存区中写入消息内容,导致共享内存区存储的消息内容出现乱序的问题,发布端进程P1可以获取该消息队列锁以获得该共享内存的写操作权限,使消息队列锁处于占用状态。
S205、发布端进程将该目标消息内容写入到该共享内存区的消息队列中。
在获得该共享内存区的写操作权限时,发布端进程P1可以将该目标消息内容写入到该共享内存区的消息队列中,具体的,可以将该目标消息内容写入到该消息队列的入口处,或将该消息内容写入到该消息队列中且未写入消息内容的区域。
发布端进程将该目标消息内容写入到该共享内存区的消息队列中的过程具可包括步骤S71~S73:
S71、根据该数据结构信息查找该消息队列的入口。
S72、在该入口处建立目标消息节点。
S73、将该目标消息内容写入到该目标消息节点中,并设置该目标消息节点的第二引用计数的值,该目标消息节点的第二引用计数用于指示当前正在读取该目标消息节点中的消息内容的订阅端进程的数量。
在步骤S71~S73中,为了契合消息队列中传输消息内容的先入先出的规则,发布端进程P1可以将新写入的消息内容写入到入口处,具体的,发布端进程P1可以根据该数据结构信息查找该消息队列的入口,在该入口处建立目标消息节点,将该目标消息内容写入到该目标消息节点中,并设置该目标消息节点的第二引用计数的值,即设置该目标消息节点的第二引用计数的初始值,以便后续可以根据第二引用计数的值确定当前正读取该目标消息节点的消息内容的订阅端进程的数量。
S206、在写入完成后,发布端进程释放该消息队列锁,并获取该目标消息内容在该共享内存区中的地址。
为了其他发布端进程可以获得共享内存区的写操作权限,或发布端进程P1可以再次获得共享内存区的写操作权限,发布端进程P1在写入目标消息内容后,可以释放该消息队列锁,使消息队列锁处于空闲状态。在发布端进程P1在写入目标消息内容后,为了实时将写入的该目标消息内容同步到订阅端进程S1,可以获取该目标消息内容在该共享内存区中的地址。
S207、发布端进程将该地址通过该套接字传输至该订阅端进程。
发布端进程将该地址通过该套接字传输至该订阅端进程包括:将该地址写入句柄池,通过该套接字将该句柄池中的句柄传输至该订阅端进程。
发布端进程P1可以该地址转换为句柄,将该句柄写入到句柄池中,通过套接字将该句柄池中的句柄传输至订阅端进程S1,具体的,该地址为该目标消息内容的首地址(或指针),根据该消息内容的首地址和共享内存区的首地址计算地址偏移量,将该地址偏移量作为句柄,写入到句柄池中,通过套接字将该句柄池中的句柄传输至订阅端进程S1。
发布端进程还可以执行以下步骤:在退出共享内存区时,将该共享内存区的第一引用计数减少预定步长,若共享内存区的第一引用计数的值为初始值,清除共享内存区所存储的所有消息内容或删除该消息队列中的消息节点。
发布端进程P1在将目标消息内容写入到共享内存区后,可以退出共享内存区,并将该共享内存区的第一引用计数减少预定步长,若共享内存区的第一引用计数的值为初始值,表明当前不存在订阅端进程和发布端进程打开且未退出该共享内存区,发布端进程P1可以清除该共享内存区所存储的所有消息内容或删除消息队列中的消息节点,以便后续可以将消息内容写入到该共享内存区;若共享内存区的第一引用计数的值不为初始值,表明当前存在订阅端进程或\和发布端进程打开且未退出该共享内存区,则不清除共享内存区的消息内,以便订阅端进程可以读取共享内存区的消息内容。
S208、订阅端进程根据该地址从该共享内存区中读取该消息内容。
订阅端进程S1接收该发布端进程通过所述套接字发送的地址包括:通过该套接字连接接收该订阅端进程传输的句柄池中的句柄,根据该句柄获取该地址。订阅端进程S1可以通过发布端进程P1发送的句柄计算得到目标消息内容的地址,具体的,根据该句柄(地址偏移量)加上共享内存区的首地址得到该目标消息内容的首地址,该目标消息内容的首地址为该目标消息内容的地址,以便可以根据该目标消息内容的首地址读取到该目标消息内容。
如前述,共享内存采用消息队列存储消息内容,该共享内存包括第一引用计数;该消息队列包括至少一个消息节点,该消息节点包括第二引用计数及消息内容;根据该地址从该共享内存中读取该目标消息内容的过程包括步骤S81~S84:
S81、打开该共享内存区,并对该共享内存区的第一引用计数增加预定步长。
在订阅端进程S1接收到地址后,若订阅端进程S1确定当前需要或后续需要读取该目标消息内容,则可以通过设置共享内存区的第一引用计数表明订阅端进程S1的需求,具体的,可以打开该共享内存区,并对该共享内存区的第一引用计数增加预定步长。
S82、根据该地址获取该消息队列中的目标消息节点。
S83、将该目标消息节点的第二引用计数增加预定步长,从该目标消息节点中读取该目标消息内容。
在需要读取该目标消息内容时,为了防止在订阅端进程S1在读取该目标消息内容的过程中,该目标消息内容被其他发布端进程或者订阅端进程将该目标消息删除,订阅端进程S1可以将该目标消息节点的第二引用计数增加预定步长,并从该目标消息节点中读取该目标消息内容。
S84、在读取完成后,将该目标消息节点的第二引用计数计算减少预定步长。
订阅端进程S1在读取完该目标消息内容后,表明该本次读取操作完成,订阅端进程S1可以将该目标消息节点的第二引用计数减少预定步长,以便后续发布端进程可以根据第二引用计数的值释放共享内存区的空间。
订阅端进程还可以执行以下步骤:在退出所述共享内存区时,将该共享内存区的第一引用计数减少预定步长,若该共享内存区的第一引用计数的值为初始值,清除该共享内存区所存储的所有消息内容或删除消息队列中的消息节点。
订阅端进程S1在获取到该目标消息内容后且不需要再读取其他消息内容时,订阅端进程S1可以退出所述共享内存区,并将该共享内存区的第一引用计数减少预定步长,若该共享内存区的第一引用计数的值为初始值,表明当前不存在订阅端进程和发布端进程打开且未退出该共享内存区,订阅端进程S1可以清除该共享内存区所存储的所有消息内容或删除消息队列中的消息节点,以便后续可以将消息内容写入到该共享内存区;若共享内存区的第一引用计数的值不为初始值,表明当前存在订阅端进程或\和发布端进程打开且未退出该共享内存区,则不清除共享内存区的消息内容,以便订阅端进程可以读取共享内存区的消息内容。
本发明实施例中,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
本发明实施例提供的进程间的通信方法可适用于一对一、一对多或多对多的进程间通信应用场景。请参见图7,以机器人场景为例进行说明,该场景包括机器人智能终端,该智能终端包括一个或多个摄像应用程序,如包括高清摄像应用程序及普通摄像应用程序,当在智能终端中启动并运行高清摄像应用程序和\或普通摄像应用程序时,在该智能终端中同步启动并运行高清摄像进程和\或普通摄像进程。该智能终端还包括各种图像应用程序,包括但不限于:人脸识别应用程序、手势识别应用程序、人体识别应用程序、姿态识别应用程序、物体识别应用程序等等;在智能终端中启动并运行这些图像识别应用程序时,在该智能终端中会同步启动并运行相应的进程。以智能终端启动人脸识别应用程序以进行支付的场景,以及启动人体识别应用程序以进行人员跟踪的场景为例;当人脸识别应用程序及人体识别应用程序被启动并运行后,对应运行人脸识别进程和人体识别进程。该人脸识别进程和人体识别进程作为订阅端进程,高清摄像进程和普通摄像进程作为发布端进程,该进程间通信方法包括以下步骤S301-S304:
S301、发布端进程建立与各个订阅端进程之间的套接字连接,具体可参见步骤S101和步骤S102。
为了使发布端进程与订阅端进程可以交互信息,可以根据需求建立发布端进程与各个订阅端进程之间的套接字连接,例如,在人脸支付的场景中,为了提高识别的准确性及提高支付的安全性,人脸识别进程可订阅高清摄像进程发布的高清图像数据来进行人脸识别;步骤S301中可建立人脸识别进程与高清摄像进程的套接字连接。再如:人体跟踪场景中,由于在此场景中进行人体识别时仅需识别出人体的基本体征,如身高、体型等信息,因此,人体识别进程可订阅普通摄像进程发布的普通图像数据进行人体识别,步骤S301中可建立人体识别进程与普通摄像进程的套接字连接。此处的高清图像数据是指像素高于或等于预设像素阈值的图像数据;普通图像数据是指像素低于预设像素阈值的图像数据;该预设像素阈值可以根据实际需要进行设定。
S302、发布端进程将获取到的图像数据写入到共享内存区,并获取该图像数据在该共享内存区的地址。
高清摄像进程接收到拍摄图像的指令时,高清摄像进程可以将终端的摄像头拍摄的高清图像数据写入到共享内存区,并获取该高清图像数据在共享内存区的地址。同样,普通摄像进程可将终端拍摄的普通图像数据写入到共享内存区,并获取该普通图像数据在共享内存区的地址。
S303、发布端进程将该地址通过该套接字传输至各个订阅端进程,具体可参见步骤S104和步骤S207。
举例来说,高清摄像进程可以将高清图像数据的地址通过该套接字传输至人脸识别进程,普通摄像进程可以将普通图像数据的地址通过该套接字传输至人体识别进程。
S304、各个订阅端进程根据该地址从该共享内存区中读取该消息内容。
人脸识别进程接收到高清摄像进程发送的地址后,可以从共享内存区读取高清摄像进程发布的高清图像数据,例如,智能终端在通过人脸识别进行支付时,人脸识别进程可以根据接收到的地址从共享内存区中读取该高清图像数据并进行人脸识别,根据人脸识别结果执行后续的支付操作。
人体识别进程接收到普通摄像进程发送的地址后,可以从共享内存区读取普通摄像进程发布的普通图像数据,例如,公安部门需要通过人体识别侦查案件的过程中,智能终端中的人体识别进程可以根据接收到的地址从共享内存区中读取该普通图像数据并进行人体识别得到识别结果,并将识别结果输出以进行后续的侦查跟踪操作。
本发明实施例中,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
基于上述进程间的通信方法的描述,本发明实施例提供一种进程间的通信装置,请参见图8,进程间的通信装置应用于进程间的通信***,该***包括发布端进程,订阅端进程及共享内存区,进程间的通信装置包括:
连接单元801,用于接收订阅端进程发送的套接字连接请求,根据所述套接字连接请求与所述订阅端进程建立套接字连接;所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的。
写入单元802,用于将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址。
传输单元803,用于将所述地址通过所述套接字传输至所述订阅端进程,以使所述至少一个订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
可选的,连接单元801,具体用于接收所述订阅端进程发送的套接字连接请求,所述套接字连接请求携带所述发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;根据所述套接字连接请求与所述订阅端进程建立套接字连接。
可选的,判断单元804,用于判断所述共享内存区是否具备存储资源。
可选的,写入单元802,用于若所述共享内存区具备存储资源,则将所述目标消息内容写入至所述共享内存区。
可选的,判断单元804,具体用于对所述共享内存区执行打开操作;若成功打开所述共享内存区,检测所述共享内存区是否能够为所述目标消息内容分配存储空间;若所述共享内存区能够为所述目标消息内容分配存储空间,则确认所述共享内存区具备存储资源;若未成功打开所述共享内存区,则新建具备存储资源的共享内存区。
可选的,写入单元802,具体用于将所述第一引用计数增加预定步长,并获取所述消息队列锁的状态,所述状态包括空闲状态或占用状态;若所述消息队列锁处于空闲状态,则获取所述消息队列锁以获得所述共享内存区的写操作权限;将所述目标消息内容写入到所述共享内存区的消息队列中;在写入完成后,释放所述消息队列锁。
可选的,写入单元802,具体用于根据所述配置信息查找所述消息队列的入口;在所述入口处建立目标消息节点;将所述目标消息内容写入到所述目标消息节点中,并设置所述目标消息节点的第二引用计数的初始值,所述目标消息节点的第二引用计数用于指示当前正在读取所述目标消息节点中的消息内容的订阅端进程的数量。
可选的,释放单元805,用于若所述共享内存区不能为所述目标消息内容分配存储空间,对所述共享内存区进行空间释放操作。
可选的,释放单元805,具体用于获取所述消息队列中建立时间最早的消息节点;若所述建立时间最早的消息节点的第二引用计数的值为初始值,从所述消息队列中删除所述建立时间最早的消息节点。
可选的,计算单元806,用于在退出所述共享内存区时,将所述共享内存区的第一引用计数减少预定步长。
可选的,清除单元807,用于若所述共享内存区的第一引用计数的值为初始值,清除所述共享内存区所存储的所有消息内容或删除所述消息队列中的消息节点。
可选的,传输单元803,具体用于将所述地址写入句柄池;通过所述套接字将所述句柄池中的句柄传输至所述订阅端进程。
本发明实施例中,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
基于上述进程间的通信方法的描述,本发明实施例提供一种进程间的通信装置,请参见图9,进程间的通信装置应用于进程间的通信***,该***包括发布端进程,订阅端进程及共享内存区,进程间的通信装置包括:
连接单元901,用于向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的。
接收单元902,用于接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址。
读取单元903,用于根据所述地址从所述共享内存中读取所述目标消息内容。
可选的,接收单元902,具体用于通过所述套接字接收所述订阅端进程传输的句柄,所述句柄是由所述发布端进程将所述地址写入句柄池所获得的;根据所述句柄获取所述地址。
可选的,所述共享内存采用消息队列存储消息内容;所述共享内存包括第一引用计数;所述消息队列包括目标消息节点,所述目标消息节点至少包括第二引用计数、用于存储所述目标消息内容的数据结构以及配置信息,所述配置信息包括链表配置信息或数组配置信息。
可选的,读取单元903,具体用于对所述共享内存区执行打开操作;若成功打开所述共享内存区,对所述共享内存区的第一引用计数增加预定步长;根据所述地址获取所述消息队列中的目标消息节点;将所述目标消息节点的第二引用计数增加预定步长;从所述目标消息节点中读取所述目标消息内容,在读取完成后,将所述目标消息节点的第二引用计数减少预定步长。
可选的,计算单元904,用于在退出所述共享内存区时,将所述共享内存区的第一引用计数减少预定步长。
可选的,清除单元905,用于若所述共享内存区的第一引用计数的值为初始值,清除所述共享内存区所存储的所有消息内容或删除所述消息队列中的消息节点。
本发明实施例中,订阅端进程与发布端进程建立套接字连接,并接收发布进程通过套接字发送的地址,根据地址从共享内存区中读取目标消息内容,只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
基于上述进程间的通信方法的描述,本发明实施例提供一种终端,请参见图10,该终端可以是智能手机、电脑、服务器、智能手表或智能手环等,终端包括进程间的通信***,该***包括发布端进程,订阅端进程及共享内存区,请参见图10,终端包括:处理器101、输入接口102、输出接口103以及计算机存储介质104。
所述计算机存储介质104可以表示存储装置,包括易失性计算机存储介质(volatile memory),例如随机存取计算机存储介质(random-access memory,RAM);计算机存储介质也可以包括非易失性计算机存储介质(non-volatile memory),例如快闪计算机存储介质(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);计算机存储介质104还可以包括上述种类的计算机存储介质的组合。
所述输入接口102可用于输入等待进行处理的待处理数据至处理器101。在一个实施例中,输入接口102可以包括多个独立的接口,例如以太网接口、LCD(Liquid CrystalDisplay,液晶显示器)接口等,分别负责不同***设备向处理器101输入数据的通信。
所述输出接口103可用于输出数据至其他与终端相连的***设备,可以向外输出处理器101的处理结果。输出接口103还可以包括多个独立的接口,例如以太网接口、camera接口等,负责处理器101向不同***设备输出数据的通信。
在一个实施例中,输出接口103以及输入接口102可以是通用输入输出(GeneralPurpose Input Output,GPIO)接口。
所述处理器101可用于读取和执行计算机指令。在一个实施例中,处理器701还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specificintegrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(genericarray logic,GAL)或其任意组合。
所述计算机存储介质104还用于存储一条或一条以上的程序指令;该程序指令包括第一指令和/或第二指令。在一种实施方式中,所述处理器101可以调用所述第一指令时能够执行进程间的通信方法以提供进程间的通信服务,具体地,所述处理器101调用第一指令执行如下步骤:
接收订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
根据所述套接字连接请求与所述订阅端进程建立套接字连接;将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;
将所述地址通过所述套接字传输至所述订阅端进程,以使所述订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
接收所述订阅端进程发送的套接字连接请求,所述套接字连接请求携带所述发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
根据所述套接字连接请求与所述订阅端进程建立套接字连接。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
判断所述共享内存区是否具备存储资源;
若所述共享内存区具备存储资源,则将所述目标消息内容写入至所述共享内存区。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
对所述共享内存区执行打开操作;
若成功打开所述共享内存区,检测所述共享内存区是否能够为所述目标消息内容分配存储空间;
若所述共享内存区能够为所述目标消息内容分配存储空间,则确认所述共享内存区具备存储资源;
若未成功打开所述共享内存区,则新建具备存储资源的共享内存区。
可选的,所述共享内存区采用消息队列存储消息内容;所述共享内存包括第一引用计数及消息队列锁;所述处理器101可以调用所述第一指令,执行如下步骤:
将所述第一引用计数增加预定步长,并获取所述消息队列锁的状态,所述状态包括空闲状态或占用状态;
若所述消息队列锁处于空闲状态,则获取所述消息队列锁以获得所述共享内存区的写操作权限;
将所述目标消息内容写入到所述共享内存区的消息队列中;
在写入完成后,释放所述消息队列锁。
可选的,所述消息队列包括至少一个消息节点,所述消息节点至少包括第二引用计数、用于存储消息内容的数据结构以及配置信息,所述配置信息包括链表配置信息或数组配置信息;所述处理器101可以调用所述第一指令,执行如下步骤:
根据所述配置信息查找所述消息队列的入口;
在所述入口处建立目标消息节点;
将所述目标消息内容写入到所述目标消息节点中,并设置所述目标消息节点的第二引用计数的初始值,所述目标消息节点的第二引用计数用于指示当前正在读取所述目标消息节点中的消息内容的订阅端进程的数量。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
若所述共享内存区不能为所述目标消息内容分配存储空间,对所述共享内存区进行空间释放操作。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
获取所述消息队列中建立时间最早的消息节点;
若所述建立时间最早的消息节点的第二引用计数的值为初始值,从所述消息队列中删除所述建立时间最早的消息节点。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
在退出所述共享内存区时,将所述共享内存区的第一引用计数减少预定步长;
若所述共享内存区的第一引用计数的值为初始值,清除所述共享内存区所存储的所有消息内容或删除所述消息队列中的消息节点。
可选的,所述处理器101可以调用所述第一指令,执行如下步骤:
将所述地址写入句柄池;
通过所述套接字将所述句柄池中的句柄传输至所述订阅端进程。
在另一种实施方式中,所述处理器101可以调用所述第二指令时能够执行进程间的通信方法以提供进程间的通信服务,具体地,所述处理器101调用第二指令执行如下步骤:
向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址;
根据所述地址从所述共享内存中读取所述目标消息内容。
可选的,所述处理器101可以调用所述第二指令,执行如下步骤:
通过所述套接字接收所述订阅端进程传输的句柄,所述句柄是由所述发布端进程将所述地址写入句柄池所获得的;
根据所述句柄获取所述地址。
可选的,所述处理器101可以调用所述第二指令,执行如下步骤:
对所述共享内存区执行打开操作;
若成功打开所述共享内存区,对所述共享内存区的第一引用计数增加预定步长;
根据所述地址获取所述消息队列中的目标消息节点;
将所述目标消息节点的第二引用计数增加预定步长;
从所述目标消息节点中读取所述目标消息内容,在读取完成后,将所述目标消息节点的第二引用计数减少预定步长。
可选的,所述处理器101可以调用所述第二指令,执行如下步骤:
在退出所述共享内存区时,将所述共享内存区的第一引用计数减少预定步长;
若所述共享内存区的第一引用计数的值为初始值,清除所述共享内存区所存储的所有消息内容或删除所述消息队列中的消息节点。
还需要说明的是,本发明的终端对应的功能既可以通过硬件设计实现,也可以通过软件设计来实现,还可以通过软硬件结合的方式来实现,在此不作限制。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的计算机存储介质,当其在计算机上运行时,所述计算机执行如上述方法实施例中记载的任何一种对进程间通信方法的部分或全部步骤。在一个实施例中,该计算机程序产品可以为一个软件安装包。
本发明实施例中,发布端进程与订阅端进程建立套接字连接,将需要发布的目标消息内容写入到共享内存区,并通过套接字将该目标消息内容在共享内存区的地址发送给订阅端进程,在订阅端进程需要读取该消息内容时,可以根据发布端进程发送的地址从共享内存区中读取该消息内容。可见,本发明实施例只需要将消息内容在共享内存区中进行拷贝,而不需要在内核及缓冲区进行频繁地拷贝,减少了消息内容的拷贝次数,可降低操作***的资源开销,并降低消息内容的传输时延,提高消息内容传输的吞吐量。并通过套接字实时地将消息内容在共享内存区的地址发送给订阅端进程,以便订阅端进程可以实时地获取到发布端进程写入的消息内容,可实现订阅端进程和发布端进程之间的消息内容同步。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明部分实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (15)
1.一种进程间的通信方法,其特征在于,包括:
接收订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
根据所述套接字连接请求与所述订阅端进程建立套接字连接;
将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;
将所述地址通过所述套接字传输至所述订阅端进程,以使所述订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
2.如权利要求1所述的方法,其特征在于,所述将需要发布的目标消息内容写入至共享内存区之前,还包括:
对所述共享内存区执行打开操作;
若未成功打开所述共享内存区,则新建具备存储资源的共享内存区;
若成功打开所述共享内存区,检测所述共享内存区是否能够为所述目标消息内容分配存储空间;
若所述共享内存区不能为所述目标消息内容分配存储空间,对所述共享内存区进行空间释放操作;若所述共享内存区能够为所述目标消息内容分配存储空间,则确认所述共享内存区具备存储资源;
若所述共享内存区具备存储资源,则将需要发布的目标消息内容写入至共享内存区。
3.如权利要求2所述的方法,其特征在于,所述共享内存区采用消息队列存储消息内容;所述共享内存包括第一引用计数及消息队列锁;所述消息队列包括至少一个消息节点,所述消息节点至少包括第二引用计数、用于存储消息内容的数据结构以及配置信息,所述配置信息包括链表配置信息或数组配置信息;
所述将需要发布的目标消息内容写入至共享内存区,包括:
将所述第一引用计数增加预定步长,并获取所述消息队列锁的状态,所述状态包括空闲状态或占用状态;
若所述消息队列锁处于空闲状态,则获取所述消息队列锁以获得所述共享内存区的写操作权限;
根据所述配置信息查找所述消息队列的入口;
在所述入口处建立目标消息节点;
将所述目标消息内容写入到所述目标消息节点中,并设置所述目标消息节点的第二引用计数的初始值,所述目标消息节点的第二引用计数用于指示当前正在读取所述目标消息节点中的消息内容的订阅端进程的数量;
在写入完成后,释放所述消息队列锁。
4.如权利要求3所述的方法,其特征在于,所述对所述共享内存区进行空间释放操作,包括:
获取所述消息队列中建立时间最早的消息节点;
若所述建立时间最早的消息节点的第二引用计数的值为初始值,从所述消息队列中删除所述建立时间最早的消息节点。
5.如权利要求3或4所述的方法,其特征在于,还包括:
在退出所述共享内存区时,将所述共享内存区的第一引用计数减少预定步长;
若所述共享内存区的第一引用计数的值为初始值,清除所述共享内存区所存储的所有消息内容或删除所述消息队列中的消息节点。
6.如权利要求1或2所述的方法,其特征在于,所述将所述地址通过所述套接字传输至所述订阅端进程,包括:
将所述地址写入句柄池;
通过所述套接字将所述句柄池中的句柄传输至所述订阅端进程。
7.一种进程间的通信方法,其特征在于,包括:
向发布端进程发送套接字连接请求以建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址;
根据所述地址从所述共享内存中读取所述目标消息内容。
8.如权利要求7所述的方法,其特征在于,所述接收所述发布端进程通过所述套接字发送的地址,包括:
通过所述套接字接收所述订阅端进程传输的句柄,所述句柄是由所述发布端进程将所述地址写入句柄池所获得的;
根据所述句柄获取所述地址。
9.如权利要求7或8所述的方法,其特征在于,所述共享内存采用消息队列存储消息内容;所述共享内存包括第一引用计数;所述消息队列包括目标消息节点,所述目标消息节点至少包括第二引用计数、用于存储所述目标消息内容的数据结构以及配置信息,所述配置信息包括链表配置信息或数组配置信息;
所述根据所述地址从所述共享内存中读取所述目标消息内容,包括:
对所述共享内存区执行打开操作;
若成功打开所述共享内存区,对所述共享内存区的第一引用计数增加预定步长;
根据所述地址获取所述消息队列中的目标消息节点;
将所述目标消息节点的第二引用计数增加预定步长;
从所述目标消息节点中读取所述目标消息内容,在读取完成后,将所述目标消息节点的第二引用计数减少预定步长。
10.如权利要求9所述的方法,其特征在于,还包括:
在退出所述共享内存区时,将所述共享内存区的第一引用计数减少预定步长;
若所述共享内存区的第一引用计数的值为初始值,清除所述共享内存区所存储的所有消息内容或删除所述消息队列中的消息节点。
11.一种进程间的通信装置,其特征在于,包括:
连接单元,用于接收订阅端进程发送的套接字连接请求,根据所述套接字连接请求与所述订阅端进程建立套接字连接;所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
写入单元,用于将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;
传输单元,用于将所述地址通过所述套接字传输至所述订阅端进程,以使所述订阅端进程根据所述地址从所述共享内存区中读取所述目标消息内容。
12.一种进程间的通信装置,其特征在于,包括:
连接单元,用于向发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;所述套接字连接请求携带所述发布端进程的标识及订阅端进程的标识;所述发布端进程的标识是从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;
接收单元,用于接收所述发布端进程通过所述套接字发送的地址,所述地址是所述发布端进程将需要发布的目标消息内容写入至共享内存区后所获取的所述目标消息内容在所述共享内存区中的地址;
读取单元,用于根据所述地址从所述共享内存中读取所述目标消息内容。
13.一种进程间的通信***,其特征在于,包括发布端进程、订阅端进程及共享内存区:
所述发布端进程,用于接收所述订阅端进程发送的套接字连接请求,所述套接字连接请求携带发布端进程的标识及所述订阅端进程的标识;所述发布端进程的标识是由所述订阅端进程从所述发布端进程发送的广播消息中获得的,或者从中心进程所获得的;根据所述套接字连接请求与所述订阅端进程建立套接字连接;将需要发布的目标消息内容写入至共享内存区,并获取所述目标消息内容在所述共享内存区中的地址;将所述地址通过所述套接字传输至所述订阅端进程;
所述订阅端进程,用于向所述发布端进程发送套接字连接请求,建立与所述发布端进程的套接字连接;接收所述发布端进程通过所述套接字发送的地址,根据所述地址从所述共享内存中读取所述目标消息内容;
所述共享内存区,用于存储所述发布端进程写入的所述目标消息内容。
14.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或一条以上第一指令,所述一条或一条以上第一指令适于由处理器加载并执行如权利要求1-6任一项所述的进程间的通信方法;或者,所述计算机存储介质存储有一条或一条以上第二指令,所述一条或一条以上第二指令适于由处理器加载并执行如权利要求7-10所述的进程间的通信方法。
15.一种终端,其特征在于,包括:
处理器,适于实现一条或一条以上指令;以及,
计算机存储介质,所述计算机存储介质存储有一条或一条以上第一指令,所述一条或一条以上第一指令适于由处理器加载并执行如权利要求1-6任一项所述的进程间的通信方法;或者,所述计算机存储介质存储有一条或一条以上第二指令,所述一条或一条以上第二指令适于由处理器加载并执行如权利要求7-10所述的进程间的通信方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810380885.0A CN110399229A (zh) | 2018-04-25 | 2018-04-25 | 进程间的通信方法、装置、***、介质及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810380885.0A CN110399229A (zh) | 2018-04-25 | 2018-04-25 | 进程间的通信方法、装置、***、介质及终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110399229A true CN110399229A (zh) | 2019-11-01 |
Family
ID=68320282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810380885.0A Pending CN110399229A (zh) | 2018-04-25 | 2018-04-25 | 进程间的通信方法、装置、***、介质及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110399229A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190748A (zh) * | 2019-12-23 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 数据共享方法、装置、设备及存储介质 |
CN111651286A (zh) * | 2020-05-27 | 2020-09-11 | 泰康保险集团股份有限公司 | 数据通信方法、装置及计算设备、存储介质 |
CN111756846A (zh) * | 2020-06-24 | 2020-10-09 | 杭州安森智能信息技术有限公司 | 一种轻量型机器人跨进程通信的方法 |
CN111858447A (zh) * | 2020-07-13 | 2020-10-30 | 深圳市集贤科技有限公司 | 一种从串口接收数据、处理数据帧的方法 |
CN112416625A (zh) * | 2020-11-30 | 2021-02-26 | 深信服科技股份有限公司 | 免拷贝的进程间通信***及方法 |
CN112463400A (zh) * | 2020-10-30 | 2021-03-09 | 中国电子科技集团公司第五十二研究所 | 一种基于共享内存的实时数据分发方法及装置 |
CN112749027A (zh) * | 2020-12-31 | 2021-05-04 | 深圳市迅雷网络技术有限公司 | 渲染进程间的通信方法、电子设备以及可读存储装置 |
CN113296967A (zh) * | 2020-02-21 | 2021-08-24 | 西安诺瓦星云科技股份有限公司 | 基于嵌入式操作***的进程管理方法、装置和*** |
CN113590362A (zh) * | 2021-08-10 | 2021-11-02 | 中孚信息股份有限公司 | 进程间消息处理方法、装置、电子设备及存储介质 |
WO2021244155A1 (zh) * | 2020-06-05 | 2021-12-09 | 华为技术有限公司 | 一种进程间通信方法以及进程间通信装置 |
CN114003413A (zh) * | 2021-12-30 | 2022-02-01 | 深圳佑驾创新科技有限公司 | 一种ipc数据通信方法、装置、设备及介质 |
CN114691051A (zh) * | 2022-05-30 | 2022-07-01 | 恒生电子股份有限公司 | 数据处理方法以及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5652885A (en) * | 1993-05-25 | 1997-07-29 | Storage Technology Corporation | Interprocess communications system and method utilizing shared memory for message transfer and datagram sockets for message control |
US20090119676A1 (en) * | 2006-09-27 | 2009-05-07 | Supalov Alexander V | Virtual heterogeneous channel for message passing |
CN101977195A (zh) * | 2010-10-29 | 2011-02-16 | 西安交通大学 | 一种基于共享内存机制虚拟机域间通信协议的实现方法 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
US20140068165A1 (en) * | 2012-09-06 | 2014-03-06 | Accedian Networks Inc. | Splitting a real-time thread between the user and kernel space |
CN105893112A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种虚拟化环境下的数据包处理方法及装置 |
CN107733839A (zh) * | 2016-08-11 | 2018-02-23 | 北京百度网讯科技有限公司 | 数据传输方法和*** |
-
2018
- 2018-04-25 CN CN201810380885.0A patent/CN110399229A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5652885A (en) * | 1993-05-25 | 1997-07-29 | Storage Technology Corporation | Interprocess communications system and method utilizing shared memory for message transfer and datagram sockets for message control |
US20090119676A1 (en) * | 2006-09-27 | 2009-05-07 | Supalov Alexander V | Virtual heterogeneous channel for message passing |
CN101977195A (zh) * | 2010-10-29 | 2011-02-16 | 西安交通大学 | 一种基于共享内存机制虚拟机域间通信协议的实现方法 |
US20140068165A1 (en) * | 2012-09-06 | 2014-03-06 | Accedian Networks Inc. | Splitting a real-time thread between the user and kernel space |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN105893112A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种虚拟化环境下的数据包处理方法及装置 |
CN107733839A (zh) * | 2016-08-11 | 2018-02-23 | 北京百度网讯科技有限公司 | 数据传输方法和*** |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190748B (zh) * | 2019-12-23 | 2023-06-09 | 腾讯科技(深圳)有限公司 | 数据共享方法、装置、设备及存储介质 |
CN111190748A (zh) * | 2019-12-23 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 数据共享方法、装置、设备及存储介质 |
CN113296967B (zh) * | 2020-02-21 | 2024-06-04 | 西安诺瓦星云科技股份有限公司 | 基于嵌入式操作***的进程管理方法、装置和*** |
CN113296967A (zh) * | 2020-02-21 | 2021-08-24 | 西安诺瓦星云科技股份有限公司 | 基于嵌入式操作***的进程管理方法、装置和*** |
CN111651286A (zh) * | 2020-05-27 | 2020-09-11 | 泰康保险集团股份有限公司 | 数据通信方法、装置及计算设备、存储介质 |
WO2021244155A1 (zh) * | 2020-06-05 | 2021-12-09 | 华为技术有限公司 | 一种进程间通信方法以及进程间通信装置 |
CN111756846A (zh) * | 2020-06-24 | 2020-10-09 | 杭州安森智能信息技术有限公司 | 一种轻量型机器人跨进程通信的方法 |
CN111756846B (zh) * | 2020-06-24 | 2023-09-29 | 杭州安森智能信息技术有限公司 | 一种轻量型机器人跨进程通信的方法 |
CN111858447A (zh) * | 2020-07-13 | 2020-10-30 | 深圳市集贤科技有限公司 | 一种从串口接收数据、处理数据帧的方法 |
CN112463400A (zh) * | 2020-10-30 | 2021-03-09 | 中国电子科技集团公司第五十二研究所 | 一种基于共享内存的实时数据分发方法及装置 |
CN112416625A (zh) * | 2020-11-30 | 2021-02-26 | 深信服科技股份有限公司 | 免拷贝的进程间通信***及方法 |
CN112416625B (zh) * | 2020-11-30 | 2024-04-09 | 深信服科技股份有限公司 | 免拷贝的进程间通信***及方法 |
CN112749027A (zh) * | 2020-12-31 | 2021-05-04 | 深圳市迅雷网络技术有限公司 | 渲染进程间的通信方法、电子设备以及可读存储装置 |
CN113590362A (zh) * | 2021-08-10 | 2021-11-02 | 中孚信息股份有限公司 | 进程间消息处理方法、装置、电子设备及存储介质 |
CN114003413A (zh) * | 2021-12-30 | 2022-02-01 | 深圳佑驾创新科技有限公司 | 一种ipc数据通信方法、装置、设备及介质 |
CN114691051A (zh) * | 2022-05-30 | 2022-07-01 | 恒生电子股份有限公司 | 数据处理方法以及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110399229A (zh) | 进程间的通信方法、装置、***、介质及终端 | |
CN105577567B (zh) | 基于Intel DPDK的网络数据包并行处理方法 | |
CN106161537B (zh) | 远程过程调用的处理方法、装置、***及电子设备 | |
CN103200128B (zh) | 一种网络包处理的方法、装置和*** | |
CN104506379B (zh) | 网络数据捕获方法和*** | |
CN109597818A (zh) | 数据更新方法、装置、存储介质和设备 | |
CN107256180B (zh) | 数据处理方法、装置及终端 | |
CN110535813A (zh) | 内核态协议栈与用户态协议栈并存处理方法和装置 | |
US9535756B2 (en) | Latency-hiding context management for concurrent distributed tasks in a distributed system | |
CN109981403A (zh) | 虚拟机网络数据流量监控方法及装置 | |
CN104333533B (zh) | 一种用于工业控制***网络的数据包零拷贝获取方法 | |
CN104395886A (zh) | 多租户中间件云服务技术 | |
CN106407463A (zh) | 一种基于Hadoop的图像处理方法及*** | |
CN108064377A (zh) | 一种多***共享内存的管理方法及装置 | |
CN109634738A (zh) | 基于微服务的异步处理方法、服务器、存储介质及装置 | |
CN110995678A (zh) | 一种面向工控网络的高效入侵检测*** | |
CN102971708B (zh) | 多线程程序的低功率执行 | |
CN109634764A (zh) | 工作流控制方法、装置、设备、存储介质和*** | |
CN110138662A (zh) | 多核***中的会话表项处理方法、装置及多核*** | |
CN106055078B (zh) | 一种移动终端的传感器处理方法、装置及移动终端 | |
CN100501735C (zh) | 透明地处理多媒体数据的***与方法 | |
CN108632166A (zh) | 一种基于dpdk的收包二级缓存方法及*** | |
FR2710993A1 (fr) | Procédé et système d'interconnexion pour la gestion de messages dans un réseau de processeurs à structure parallèle. | |
EP0524089A1 (fr) | Structure de logiciel pour système de traitement de données, notamment pour système de télécommunications | |
CN117194562A (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 |