用于进程间传输消息的方法和装置制造方法及图纸

技术编号:17304314 阅读:59 留言:0更新日期:2018-02-18 22:14
本申请公开了用于进程间传输消息的方法和装置。所述方法的一具体实施方式包括:根据待传输消息的大小,将操作系统分配的共享内存划分为多个内存块;在所述多个内存块中,确定一个当前未被写入的内存块作为待写入内存块;监测所述待写入内存块当前是否被读取;响应于所述待写入内存块当前被读取,对所述待写入内存块执行加锁操作;响应于所述待写入内存块被读取结束,对所述待写入内存块执行解锁操作,并向所述待写入内存块中写入所述待传输消息。该实施方式有效地控制了向共享内存中写入消息的速度,以避免发送进程发送消息的速度过快,使得接收进程不能实时地接收发送进程发送的消息,保证了消息处理的同步性,从而提高了消息传输的可靠性。

Methods and devices for inter process transmission of messages

The present application discloses methods and devices for interprocess transmission of messages. Including a specific embodiment of the method: according to the size of the message to be transmitted, the operating system allocates a shared memory is divided into a plurality of memory blocks; the plurality of memory blocks, a block of memory not currently being written as to be written to the memory block; monitoring the current memory blocks to be written whether it is read; in response to the current memory blocks to be written to be read, to be written to the memory blocks perform locking operation on the; in response to the memory block to be written to be read over, to be written to the memory block unlock operation on the, and to the block of memory to be written into the writing the message to be transmitted. The implementation of effective control of the news writes to the shared memory speed, to avoid sending process send messages too quickly, making the process of receiving real-time sending and receiving the message sending process, to ensure the synchronization of message processing, thereby improving the reliability of message transmission.

【技术实现步骤摘要】
用于进程间传输消息的方法和装置
本申请涉及计算机
,具体涉及计算机应用
,尤其涉及一种用于进程间传输消息的方法和装置。
技术介绍
进程间数据交互需要通过消息队列、共享内存、管道等方式,在使用消息队列或管道时,发送消息的进程根据自身的发送频率将消息写入消息队列中,接收消息的进程从消息队列中获取消息。这种方法存在的弊端为当接收消息的进程的处理频率小于发送消息的进程的发送频率且消息队列满时,发送消息的进程继续向消息队列中写入消息会造成消息队列的溢出,即一部分还未被接收消息的进程接收的消息会被删除,造成消息的丢失。通常使用的基于共享内存的进程间通信的方法,不能保证发送消息的进程与接收消息的进程之间的同步性,使得消息传输的可靠性较差。
技术实现思路
本申请的目的在于提出一种用于进程间传输消息的方法和装置,来解决以上
技术介绍
部分提到的技术问题。第一方面,本申请提供了一种用于进程间传输消息的方法,所述方法包括:根据待传输消息的大小,将操作系统分配的共享内存划分为多个内存块;在所述多个内存块中,确定一个当前未被写入的内存块作为待写入内存块;监测所述待写入内存块当前是否被读取;响应于所述待写入内存块当前被读取,对所述待写入内存块执行加锁操作;响应于所述待写入内存块被读取结束,对所述待写入内存块执行解锁操作,并向所述待写入内存块中写入所述待传输消息。在一些实施例中,所述确定一个当前未被写入的内存块作为待写入内存块,包括:为所述多个内存块设置连续的序号;将预存在所述共享内存中的写入数量值递增;确定递增后的所述写入数量值对应的第一内存块的序号,所述写入数量值与所述多个内存块一一对应;监测所述第一内存块当前是否被写入;响应于所述第一内存块当前未被写入,将所述第一内存块作为所述待写入内存块。在一些实施例中,所述确定递增后的所述写入数量值对应的第一内存块的序号,包括:确定所述多个内存块的数量;将所述递增后的写入数量值对所述多个内存块的数量求余;将求余值作为所述第一内存块的序号。在一些实施例中,所述方法还包括:响应于所述第一内存块当前被写入,按照所述多个内存块的序号顺序,查询其它内存块当前是否被写入;响应于查询到其它内存块当前未被写入,将当前未被写入的内存块作为所述待写入内存块。在一些实施例中,所述方法还包括:响应于查询到其它内存块当前均被写入,则按照所述多个内存块的序号循环查询,直至查询到一个内存块当前未被写入,将当前未被写入的内存块作为所述待写入内存块。在一些实施例中,所述监测所述待写入内存块当前是否被读取,包括:监测预存在所述待写入内存块中的读取数量值是否等于预设值;当所述读取数量值等于所述预设值时,确定所述待写入内存块当前未被读取;当所述读取数量值不等于所述预设值时,确定所述待写入内存块当前被读取。在一些实施例中,所述方法还包括:向所述待写入内存块中写入所述待传输消息时,将预存在所述待写入内存块中的写入标识设置为真值,所述真值对应所述待写入内存块当前被写入;响应于向所述待写入内存块中写入所述待传输消息完成,将所述写入标识设置为假值,所述假值对应所述待写入内存块当前未被写入。第二方面,本申请提供了一种用于进程间传输消息的方法,所述方法包括:将操作系统的共享内存的地址映射到自身的地址空间内;从所述共享内存的多个内存块中,确定最新写入消息的内存块作为待读取内存块;监测所述待读取内存块当前是否被写入;响应于所述待读取内存块当前被写入,进入进程等待状态;响应于所述待读取内存块被写入结束,读取所述待读取内存块中存储的消息。在一些实施例中,所述确定最新写入消息的内存块作为待读取内存块,包括:读取所述共享内存中各内存块的序号及预存的写入数量值;将所述写入数量值与所述多个内存块的数量求余;将序号等于求余值的内存块作为所述待读取内存块。在一些实施例中,所述监测所述待读取内存块当前是否被写入,包括:监测所述待读取内存块预存的写入标识的值是否为真值,所述真值对应所述待读取内存块当前被写入;或监测所述待读取内存块预存的写入标识的值是否为假值,所述假值对应所述待读取内存块当前未被写入。在一些实施例中,所述方法还包括:响应于所述待读取内存块当前未被写入,读取所述待读取内存块中存储的消息。在一些实施例中,所述方法还包括:读取所述待读取内存块中存储的消息过程中,将预存在所述待读取内存块中的读取数量值递增;响应于读取所述待读取内存块中存储的消息完成,将预存在所述待读取内存块中的读取数量值递减。在一些实施例中,所述方法还包括:响应于读取所述待读取内存块中存储的消息完成,将其它内存块作为新的待读取内存块;比较所述求余值与所述新的待读取内存块的序号的大小;响应于所述新的待读取内存块的序号小于所述求余值,读取所述新的待读取内存块中存储的消息;响应于所述新的待读取内存块的序号等于所述求余值,进入所述进程等待状态。第三方面,本申请提供了一种用于进程间传输消息的装置,所述装置包括:划分单元,用于根据待传输消息的大小,将操作系统分配的共享内存划分为多个内存块;第一确定单元,用于在所述多个内存块中,确定一个当前未被写入的内存块作为待写入内存块;第一监测单元,用于监测所述待写入内存块当前是否被读取;锁定单元,用于响应于所述待写入内存块当前被读取,对所述待写入内存块执行加锁操作;写入单元,用于响应于所述待写入内存块被读取结束,对所述待写入内存块执行解锁操作,并向所述待写入内存块中写入所述待传输消息。在一些实施例中,所述第一确定单元包括:设置模块,用于为所述多个内存块设置连续的序号;赋值模块,用于将预存在所述共享内存中的写入数量值递增;第一确定模块,用于确定递增后的所述写入数量值对应的第一内存块的序号,所述写入数量值与所述多个内存块一一对应;监测模块,用于监测所述第一内存块当前是否被写入;第二确定模块,用于响应于所述第一内存块当前未被写入,将所述第一内存块作为所述待写入内存块。在一些实施例中,所述第一确定模块进一步用于:确定所述多个内存块的数量;将所述递增后的写入数量值对所述多个内存块的数量求余;将求余值作为所述第一内存块的序号。在一些实施例中,所述第一确定单元还包括:查询模块,用于响应于所述第一内存块当前被写入,按照所述多个内存块的序号顺序,查询其它内存块当前是否被写入;第三确定模块,用于响应于查询到其它内存块当前未被写入,将当前未被写入的内存块作为所述待写入内存块。在一些实施例中,所述第一确定单元还包括:第四确定模块,用于响应于查询到其它内存块当前均被写入,则按照所述多个内存块的序号循环查询,直至查询到一个内存块当前未被写入,将当前未被写入的内存块作为所述待写入内存块。在一些实施例中,所述第一监测单元包括:监测模块,用于监测预存在所述待写入内存块中的读取数量值是否等于预设值;第五确定模块,用于当所述读取数量值等于所述预设值时,确定所述待写入内存块当前未被读取;第六确定模块,用于当所述读取数量值不等于所述预设值时,确定所述待写入内存块当前被读取。在一些实施例中,所述装置还包括:第一标识单元,用于向所述待写入内存块中写入所述待传输消息时,将预存在所述待写入内存块中的写入标识设置为真值,所述真值对应所述待写入内存块当前被写入;第二标识单元,用于响应于向所述待写入内本文档来自技高网...
用于进程间传输消息的方法和装置

【技术保护点】
一种用于进程间传输消息的方法,其特征在于,所述方法包括:根据待传输消息的大小,将操作系统分配的共享内存划分为多个内存块;在所述多个内存块中,确定一个当前未被写入的内存块作为待写入内存块;监测所述待写入内存块当前是否被读取;响应于所述待写入内存块当前被读取,对所述待写入内存块执行加锁操作;响应于所述待写入内存块被读取结束,对所述待写入内存块执行解锁操作,并向所述待写入内存块中写入所述待传输消息。

【技术特征摘要】
1.一种用于进程间传输消息的方法,其特征在于,所述方法包括:根据待传输消息的大小,将操作系统分配的共享内存划分为多个内存块;在所述多个内存块中,确定一个当前未被写入的内存块作为待写入内存块;监测所述待写入内存块当前是否被读取;响应于所述待写入内存块当前被读取,对所述待写入内存块执行加锁操作;响应于所述待写入内存块被读取结束,对所述待写入内存块执行解锁操作,并向所述待写入内存块中写入所述待传输消息。2.根据权利要求1所述的方法,其特征在于,所述确定一个当前未被写入的内存块作为待写入内存块,包括:为所述多个内存块设置连续的序号;将预存在所述共享内存中的写入数量值递增;确定递增后的所述写入数量值对应的第一内存块的序号,所述写入数量值与所述多个内存块一一对应;监测所述第一内存块当前是否被写入;响应于所述第一内存块当前未被写入,将所述第一内存块作为所述待写入内存块。3.根据权利要求2所述的方法,其特征在于,所述确定递增后的所述写入数量值对应的第一内存块的序号,包括:确定所述多个内存块的数量;将所述递增后的写入数量值对所述多个内存块的数量求余;将求余值作为所述第一内存块的序号。4.根据权利要求2所述的方法,其特征在于,所述方法还包括:响应于所述第一内存块当前被写入,按照所述多个内存块的序号顺序,查询其它内存块当前是否被写入;响应于查询到其它内存块当前未被写入,将当前未被写入的内存块作为所述待写入内存块。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:响应于查询到其它内存块当前均被写入,则按照所述多个内存块的序号循环查询,直至查询到一个内存块当前未被写入,将当前未被写入的内存块作为所述待写入内存块。6.根据权利要求1-5任一项所述的方法,其特征在于,所述监测所述待写入内存块当前是否被读取,包括:监测预存在所述待写入内存块中的读取数量值是否等于预设值;当所述读取数量值等于所述预设值时,确定所述待写入内存块当前未被读取;当所述读取数量值不等于所述预设值时,确定所述待写入内存块当前被读取。7.根据权利要求1所述的方法,其特征在于,所述方法还包括:向所述待写入内存块中写入所述待传输消息时,将预存在所述待写入内存块中的写入标识设置为真值,所述真值对应所述待写入内存块当前被写入;响应于向所述待写入内存块中写入所述待传输消息完成,将所述写入标识设置为假值,所述假值对应所述待写入内存块当前未被写入。8.一种用于进程间传输消息的方法,其特征在于,所述方法包括:将操作系统的共享内存的地址映射到自身的地址空间内;从所述共享内存的多个内存块中,确定最新写入消息的内存块作为待读取内存块;监测所述待读取内存块当前是否被写入;响应于所述待读取内存块当前被写入,进入进程等待状态;响应于所述待读取内存块被写入结束,读取所述待读取内存块中存储的消息。9.根据权利要求8所述的方法,其特征在于,所述确定最新写入消息的内存块作为待读取内存块,包括:读取所述共享内存中各内存块的序号及预存的写入数量值;将所述写入数量值与所述多个内存块的数量求余;将序号等于求余值的内存块作为所述待读取内存块。10.根据权利要求8所述的方法,其特征在于,所述监测所述待读取内存块当前是否被写入,包括:监测所述待读取内存块预存的写入标识的值是否为真值,所述真值对应所述待读取内存块当前被写入;或监测所述待读取内存块预存的写入标识的值是否为假值,所述假值对应所述待读取内存块当前未被写入。11.根据权利要求8所述的方法,其特征在于,所述方法还包括:响应于所述待读取内存块当前未被写入,读取所述待读取内存块中存储的消息。12.根据权利要求8或11所述的方法,其特征在于,所述方法还包括:读取所述待读取内存块中存储的消息过程中,将预存在所述待读取内存块中的读取数量值递增;响应于读取所述待读取内存块中存储的消息完成,将预存在所述待读取内存块中的读取数量值递减。13.根据权利要求9所述的方法,其特征在于,所述方法还包括:响应于读取所述待读取内存块中存储的消息完成,将其它内存块作为新的待读取内存块;比较所述求余值与所述新的待读取内存块的序号的大小;响应于所述新的待读取内存块的序号小于所述求余值,读取所述新的待读取内存块中存储的消息;响应于所述新的待读取内存块的序号等于所述求余值,进入所述进程等待状态。14.一种用于进程间传输消息的装置,其特征在于,所述装置包括:划分单元,用于根据待传输消息的大小,将操作系统分配的共享内存划分为多个内存块;第一确定单元,用于在所述多个内存块中,确定一个当前未被写入的内存块...

【专利技术属性】
技术研发人员:冯靖超夏黎明王全曲宁王海峰陈卓
申请(专利权)人:北京百度网讯科技有限公司
类型:发明
国别省市:北京,11

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

1