进程间通信方法、装置及存储介质制造方法及图纸

技术编号:24168120 阅读:23 留言:0更新日期:2020-05-16 02:04
本发明专利技术公开了一种进程间通信方法、装置及存储介质。该进程间通信方法包括:利用读对象打开共享内存流并获取共享内存流的写入指针,共享内存流用于流式存储数据包,写入指针用于指示第一数据包的位置并且在完成第一数据包的写入后更新,第一数据包为最后一次向共享内存流写入的数据包;利用读对象比较读对象的当前读指针与写入指针,当前读指针用于指示第二数据包的位置,第二数据包为利用读对象最后一次从共享内存流中读取的数据包;若比较结果表示第一数据包在第二数据包之后,则利用读对象从共享内存流中读取第二数据包之后的数据包并更新当前读指针。通过上述方式,本发明专利技术能够减少进程间通信的延时。

【技术实现步骤摘要】
进程间通信方法、装置及存储介质
本申请涉及计算机领域,特别是涉及一种进程间通信方法、装置及存储介质。
技术介绍
在多进程系统中,不同进程之间的相互通信需要使用进程间通信机制。常见的进程间通信机制有共享内存等。共享内存是一种简单快速的进程间通信机制,然而为了保证共享内存中数据的准确性,需要选择合适的同步机制以协调进程间的执行顺序。常见的进程间同步机制有互斥锁、自旋锁等。这些同步机制中读操作和写操作是互斥的,也就是说,若有进程正在向共享内存写入数据,其他进程必须等到写入完成后才能进行读取操作,反之亦然。同步机制引入的可能的等待时间给进程间通信带来了延时,影响了进程间通信的效率。
技术实现思路
本申请提供一种进程间通信方法、装置及存储介质,能够解决现有技术中的同步机制影响进程间通信效率的问题。为解决上述技术问题,本申请采用的一个技术方案是:提供一种进程间通信方法,该进程间通信方法包括:利用读对象打开共享内存流并获取共享内存流的写入指针,共享内存流用于流式存储数据包,写入指针用于指示第一数据包的位置并且在完成第一数据包的写入后更新,第一数据包为最后一次向共享内存流写入的数据包;利用读对象比较读对象的当前读指针与写入指针,当前读指针用于指示第二数据包的位置,第二数据包为利用读对象最后一次从共享内存流中读取的数据包;若比较结果表示第一数据包在第二数据包之后,则利用读对象从共享内存流中读取第二数据包之后的数据包并更新当前读指针。为解决上述技术问题,本申请采用的另一个技术方案是:提供一种进程间通信装置,该进程间通信装置包括处理器,处理器用于执行指令以实现前述的方法。为解决上述技术问题,本申请采用的再一个技术方案是:提供一种存储介质,存储有指令,指令被执行时实现前述的方法。本申请的有益效果是:通过利用读对象打开共享内存流并获取共享内存流的写入指针,共享内存流用于流式存储数据包,写入指针用于指示第一数据包的位置并且在完成第一数据包的写入后更新,第一数据包为最后一次向共享内存流写入的数据包;利用读对象比较读对象的当前读指针与写入指针,当前读指针用于指示第二数据包的位置,第二数据包为利用读对象最后一次从共享内存流中读取的数据包;若比较结果表示第一数据包在第二数据包之后,则利用读对象从共享内存流中读取第二数据包之后的数据包并更新当前读指针。读对象通过比较当前读指针和写入指针,可以从共享内存流中读取未读的已完成写入的数据包。由于共享内存流是流式存储,即第n+1个数据包接在第n个数据包之后存储,n为正整数,在读对象进行读取的过程中,写对象可以继续向共享内存流写入新的数据包而不会影响当读对象读取已经完成写入的数据包,同时由于写入过程中写入指针仍未更新,读对象也不会读取正在写入的数据包,对共享内存流的读操作和写操作可以同时进行而不会互相影响,无需在读写操作之间引入互斥的机制,读对象和写对象不需要等待对方的操作完成,缩短了进程间通信的延时,提高了进程间通信的效率。附图说明图1是本专利技术进程间通信方法第一实施例的流程示意图;图2是图1中S11的具体流程示意图;图3是本专利技术进程间通信方法第一实施例中一种共享内存流信息表的示意图;图4是图1中S13的具体流程示意图;图5是本专利技术进程间通信方法第二实施例的流程示意图;图6是本专利技术进程间通信方法第二实施例中自描述数据包的示意图;图7是本专利技术进程间通信方法第三实施例的流程示意图;图8是本专利技术进程间通信方法第四实施例的流程示意图;图9是图8中S42的具体流程示意图;图10是本专利技术进程间通信方法第五实施例的流程示意图;图11是图10中S506的示意图;图12是图10中S513的示意图;图13是本专利技术进程间通信装置一实施例的结构示意图;图14是本专利技术存储介质一实施例的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。本申请中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。本申请实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,在不冲突的情况下,本文所描述的实施例可以与其它实施例相结合。图1是本专利技术进程间通信方法第一实施例的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图1所示的流程顺序为限。如图1所示,本实施例包括:S11:利用读对象打开共享内存流并获取共享内存流的写入指针。共享内存流用于流式存储写对象与读对象之间交换的数据包。流式存储是指第n+1个写入的数据包接在第n个写入的数据包之后存储,n为正整数。读对象可以是进程间通信中接收数据的进程本身或其中的线程,写对象可以是进程间通信中发送数据的进程本身或其中的线程。写对象将数据包写入共享内存流中,读对象从共享内存流中读取写对象写入的数据包,实现读写对象之间的数据交换过程,从而实现进程间通信。每个共享内存流对应至少一个读对象和至少一个写对象。若读对象的数量大于一,每个读对象分别对应一个当前读指针并且独立使用/维护。若写对象的数量大于一,所有写对象共用,或者说共同维护一个写入指针。写入指针用于指示第一数据包的位置并且在完成第一数据包的写入后更新,第一数据包为最后一次向共享内存流写入的数据包。也就是说,写入指针用于指示共享内存流的已完成写入的结尾,也可以被称为结尾指针或流结尾指针。可以利用读对象采用原子读操作获取写入指针。随着进程间通信的延续,流式存储的特性会使得共享内存流不断变大,为防止出现溢出,可以在进程间通信时长大于第一阈值和/或共享内存流的大小大于第二阈值的情况下,重置共享内存流,例如将写入指针和本文档来自技高网...

【技术保护点】
1.一种进程间通信方法,其特征在于,包括:/n利用读对象打开共享内存流并获取所述共享内存流的写入指针,所述共享内存流用于流式存储数据包,所述写入指针用于指示第一数据包的位置并且在完成所述第一数据包的写入后更新,所述第一数据包为最后一次向所述共享内存流写入的数据包;/n利用所述读对象比较所述读对象的当前读指针与所述写入指针,所述当前读指针用于指示第二数据包的位置,所述第二数据包为利用所述读对象最后一次从所述共享内存流中读取的数据包;/n若比较结果表示所述第一数据包在所述第二数据包之后,则利用所述读对象从所述共享内存流中读取所述第二数据包之后的数据包并更新所述当前读指针。/n

【技术特征摘要】
1.一种进程间通信方法,其特征在于,包括:
利用读对象打开共享内存流并获取所述共享内存流的写入指针,所述共享内存流用于流式存储数据包,所述写入指针用于指示第一数据包的位置并且在完成所述第一数据包的写入后更新,所述第一数据包为最后一次向所述共享内存流写入的数据包;
利用所述读对象比较所述读对象的当前读指针与所述写入指针,所述当前读指针用于指示第二数据包的位置,所述第二数据包为利用所述读对象最后一次从所述共享内存流中读取的数据包;
若比较结果表示所述第一数据包在所述第二数据包之后,则利用所述读对象从所述共享内存流中读取所述第二数据包之后的数据包并更新所述当前读指针。


2.根据权利要求1所述的方法,其特征在于,
所述写入指针与所述第一数据包之间的相对位置关系与所述当前读指针与所述第二数据包之间的相对位置关系相同,所述写入指针在所述当前读指针之后的所述比较结果表示所述第一数据包在所述第二数据包之后。


3.根据权利要求2所述的方法,其特征在于,
所述写入指针指向所述第一数据包的结尾,所述当前读指针指向所述第二数据包的结尾。


4.根据权利要求1所述的方法,其特征在于,进一步包括:
若所述比较结果表示所述第一数据包与所述第二数据包相同,则不利用所述读对象从所述共享内存流中进行读取。


5.根据权利要求1所述的方法,其特征在于,
所述利用所述读对象从所述共享内存流中读取所述第二数据包之后的数据包包括:
判断所述第二数据包之后的下一数据包是否存在;
若存在,则利用所述读对象读取所述第二数据包之后的下一数据包,并在读取完成之后更新所述当前读指针;
若更新后的所述第二数据包与所述第一数据包不同,则继续执行上述步骤,否则停止读取。


6.根据权利要求5所述的方法,其特征在于,所述判断所述第二数据包之后的下一数据包是否存在包括:
确定所述第一数据包的结尾与所述第二数据包的结尾之差是否大于或等于所述下一数据包的大小,其中所述下一数据包的大小是固定值或者是包括在所述下一数据包中。


7.根据权利要求1所述的方法,其特征在于,
所述利用读对象打开共享内存流包括:
利用所述读对象打开共享内存流信息表;
利用所述读对象在所述共享内存流信息表中查找所述共享内存流的条目,所述共享内存流的条...

【专利技术属性】
技术研发人员:陈燮民黄真明吴群周昆
申请(专利权)人:科大讯飞股份有限公司
类型:发明
国别省市:安徽;34

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

1