一种进程间通信的方法及相关装置制造方法及图纸

技术编号:20389263 阅读:21 留言:0更新日期:2019-02-20 02:37
本发明专利技术实施例公开了一种进程间通信的方法以及相关装置,用于解决现有技术中父子进程通信内容不可靠的问题。本发明专利技术实施例方法包括:在施压机中创建共享文件,所述共享文件用于多个进程间信息的共享,所述多个进程包括一个守护进程和多个施压子进程;获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存,所述共享内存为与所述共享文件对应的可读内存;当所述施压子进程产生消息时,对所述消息进行序列化处理,以在所述共享文件中组成完整的消息;将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段,以通过所述共享内存将所述消息从施压子进程发送给所述守护进程。

【技术实现步骤摘要】
一种进程间通信的方法及相关装置
本专利技术涉及性能测试领域,尤其涉及一种进程间通信的方法及相关装置。
技术介绍
性能测试平台施压机压测是多进程多线程模型,一个施压机上存在多个施压进程,施压进程拉起后需要绑定传输控制协议(transmissioncontrolprotocol,TCP)的服务server端的端口号,通过施压进程和施压机守护进程单项的进程间通信传给施压机守护进程,进而传给控制console端。现有技术中,基于开源压测平台NGrinder,采用java输入输出流作为守护进程和施压进程,即通过父进程输入流和施压子进程输出流建立通信通道。然而,现有技术中,基于NGrinder采用java输入输出流作为守护进程和施压进程间通信方案虽然简单,但是开发人员容易误用输入输出流,会导致父子进程通信内容并不可靠。
技术实现思路
本专利技术实施例提供了一种进程间通信的方法以及相关装置,用于解决现有技术中父子进程通信内容不可靠的问题。本专利技术实施例的第一方面提供了一种进程间通信的方法,包括:在施压机中创建共享文件,所述共享文件用于多个进程间信息的共享,所述多个进程包括一个守护进程和多个施压子进程;获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存,所述共享内存为与所述共享文件对应的可读内存;当所述施压子进程产生消息时,对所述消息进行序列化处理,以在所述共享文件中组成完整的消息;将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段,以通过所述共享内存将所述消息从施压子进程发送给所述守护进程。在一种可能的实施例中,所述获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存包括:通过函数randomAccessFile.getChannel()获得所述共享文件对应的文件管道,所述randomAccessFile为用于支持读写随机存取文件的类;将所述文件管道作为函数MappedByteBufferWrap()的输入,以获得所述共享内存。在一种可能的实施例中,所述对所述消息进行序列化处理,以在所述共享文件中组成完整的消息包括:通过函数jdkSerializable()实现所述消息的序列化;通过函数putInt()获得所述消息的长度,并根据put()函数在所述共享文件中组成完整的消息。在一种可能的实施例中,所述方法还包括:通过函数trylock()获取所述共享文件的文件锁,所述文件锁用于避免所述一个守护进程和多个施压子进程之间的资源冲突。在一种可能的实施例中,所述将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段包括:通过函数mMappedByteBuffer.position()和mMappedByteBuffer.put()将所述消息写入所述共享文件中;将所述共享内存的写索引字段和所述消息的长度的和作为函数setWriteIndex()的输入,以更新所述共享内存的写索引字段。在一种可能的实施例中,所述方法还包括:当所述守护进程读取所述消息时,对所述共享文件进行压缩并过滤掉所述守护进程读取的字节。在一种可能的实施例中,所述对所述共享文件进行压缩并过滤掉所述守护进程读取的字节包括:通过函数compact()对所述共享文件进行压缩;将所述共享内存的写索引字段和目标数组的长度的差作为函数setWriteIndex()的输入,以过滤所述读取的字节,所述目标数组用于所述守护进程读取所述消息。本专利技术实施例的第二方面提供了一种通信装置,包括:创建单元,用于在施压机中创建共享文件,所述共享文件用于多个进程间信息的共享,所述多个进程包括一个守护进程和多个施压子进程;获得单元,用于获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存,所述共享内存为与所述共享文件对应的可读内存;处理单元,用于当所述施压子进程产生消息时,对所述消息进行序列化处理,以在所述共享文件中组成完整的消息;写入单元,用于将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段,以通过所述共享内存将所述消息从施压子进程发送给所述守护进程。在一种可能的实施例中,所述处理单元具体用于,通过函数randomAccessFile.getChannel()获得所述共享文件对应的文件管道,所述randomAccessFile为用于支持读写随机存取文件的类;将所述文件管道作为函数MappedByteBufferWrap()的输入,以获得所述共享内存。在一种可能的实施例中,所述处理单元具体用于:通过函数jdkSerializable()实现所述消息的序列化;通过函数putInt()获得所述消息的长度,并根据put()函数在所述共享文件中组成完整的消息。在一种可能的实施例中,所述获得单元还用于:通过函数trylock()获取所述共享文件的文件锁,所述文件锁用于避免所述一个守护进程和多个施压子进程之间的资源冲突。在一种可能的实施例中,所述写入单元具体用于:通过函数mMappedByteBuffer.position()和mMappedByteBuffer.put()将所述消息写入所述共享文件中;将所述共享内存的写索引字段和所述消息的长度的和作为函数setWriteIndex()的输入,以更新所述共享内存的写索引字段。在一种可能的实施例中,所述处理单元还用于:当所述守护进程读取所述消息时,对所述共享文件进行压缩并过滤掉所述守护进程读取的字节。在一种可能的实施例中,所述处理单元具体用于,通过函数compact()对所述共享文件进行压缩;将所述共享内存的写索引字段和目标数组的长度的差作为函数setWriteIndex()的输入,以过滤所述读取的字节,所述目标数组用于所述守护进程读取所述消息。本专利技术第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述任意一项所述的方法的步骤。本专利技术第四方面提供了一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于:所述计算机管理类程序被处理器执行时实现如上述任意一项所述的方法的步骤。从以上技术方案可以看出,本专利技术实施例具有以下优点:在施压机中创建共享文件,所述共享文件用于多个进程间信息的共享,所述多个进程包括一个守护进程和多个施压子进程;获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存,所述共享内存为与所述共享文件对应的可读内存;当所述施压子进程产生消息时,对所述消息进行序列化处理,以在所述共享文件中组成完整的消息;将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段,以通过所述共享内存将所述消息从施压子进程发送给所述守护进程。本申请实施例基于共享内存、文件锁、消息协议设计出一套适合单机施压机守护进程和施压子进程间的通信方案,以解决现有技术中父子进程通信内容不可靠的问题。附图说明图1a为本专利技术实施例提供的一种可能的进程间通信的方法的流程图;图1b为本专利技术实施例提供的一种可能的消息协议的格式示意图;图2为本专利技术实施例提供的一种可能的通信装置的结构示意图;图3为本专利技术实施例提供的一种可能的电子设备的硬件结构示意图;图4为本专利技术实施例提供的一种可能的计算机可读存储介质的硬件结构示意图。具体实施方式本专利技术实施例提供了一种进程本文档来自技高网...

【技术保护点】
1.一种进程间通信的方法,其特征在于,包括:在施压机中创建共享文件,所述共享文件用于多个进程间信息的共享,所述多个进程包括一个守护进程和多个施压子进程;获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存,所述共享内存为与所述共享文件对应的可读内存;当所述施压子进程产生消息时,对所述消息进行序列化处理,以在所述共享文件中组成完整的消息;将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段,以通过所述共享内存将所述消息从施压子进程发送给所述守护进程。

【技术特征摘要】
1.一种进程间通信的方法,其特征在于,包括:在施压机中创建共享文件,所述共享文件用于多个进程间信息的共享,所述多个进程包括一个守护进程和多个施压子进程;获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存,所述共享内存为与所述共享文件对应的可读内存;当所述施压子进程产生消息时,对所述消息进行序列化处理,以在所述共享文件中组成完整的消息;将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段,以通过所述共享内存将所述消息从施压子进程发送给所述守护进程。2.根据权利要求1所述的方法,其特征在于,所述获得所述共享文件对应的文件管道,并根据所述文件管道获得共享内存包括:通过函数randomAccessFile.getChannel()获得所述共享文件对应的文件管道,所述randomAccessFile为用于支持读写随机存取文件的类;将所述文件管道作为函数MappedByteBufferWrap()的输入,以获得所述共享内存。3.根据权利要求1所述的方法,其特征在于,所述对所述消息进行序列化处理,以在所述共享文件中组成完整的消息包括:通过函数jdkSerializable()实现所述消息的序列化;通过函数putInt()获得所述消息的长度,并根据put()函数在所述共享文件中组成完整的消息。4.根据权利要求1所述的方法,其特征在于,所述方法还包括:通过函数trylock()获取所述共享文件的文件锁,所述文件锁用于避免所述一个守护进程和多个施压子进程之间的资源冲突。5.根据权利要求1所述的方法,其特征在于,所述将所述消息写入所述共享文件中,并更新所述共享内存的写索引字段包括:通过函数mMappedBy...

【专利技术属性】
技术研发人员:付得龙
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

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

1