CN102662775A - 一种进程通信方法和装置 - Google Patents

一种进程通信方法和装置 Download PDF

Info

Publication number
CN102662775A
CN102662775A CN2012100895811A CN201210089581A CN102662775A CN 102662775 A CN102662775 A CN 102662775A CN 2012100895811 A CN2012100895811 A CN 2012100895811A CN 201210089581 A CN201210089581 A CN 201210089581A CN 102662775 A CN102662775 A CN 102662775A
Authority
CN
China
Prior art keywords
data
originating
memory headroom
serializing
message
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.)
Granted
Application number
CN2012100895811A
Other languages
English (en)
Other versions
CN102662775B (zh
Inventor
杭程
段培堃
谢志宏
任寰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Qizhi Software Beijing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Qizhi Software Beijing Co Ltd filed Critical Qizhi Software Beijing Co Ltd
Priority to CN201210089581.1A priority Critical patent/CN102662775B/zh
Publication of CN102662775A publication Critical patent/CN102662775A/zh
Application granted granted Critical
Publication of CN102662775B publication Critical patent/CN102662775B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Mobile Radio Communication Systems (AREA)

Abstract

本申请提供了一种进程通信方法和装置,其中的方法具体包括:源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;源进程向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。本申请能够提高进程的执行准确率、执行效率和进程的通信效率。

Description

一种进程通信方法和装置
技术领域
本申请涉及通信技术领域,特别是涉及一种进程通信方法和装置。
背景技术
目前随着时代的发展,单进程程序在很多场合已不能满足人们的需求。如何编写多进程程序已成为现代程序设计技术的重点。在多进程程序中,数据的交互和共享是不可避免的。例如,某些浏览器支持多进程模式,页面A、页面B不在同一个进程运行,而需要经常在它们之间进行数据共享。
Microsoft Win32API提供了多种进程通信的方式,如共享内存方式、剪贴板方式等。参照图1,示出了现有技术一种共享内存方式的进程通信方法的流程示意图,其中,进程A和进程B使用同一共享内存区,进程A发送数据1到共享内存区中去,并通知进程B去接收,此时进程B可能正忙于其他事务,而没有及时对共享内存区中的数据进行操作;此时若进程A发送数据2到共享内存中,进程B现在开始处理消息,并对共享内存区中的数据进行操作就会出现读写错乱的问题,影响进程的执行准确率。
为了避免读写错乱的问题,现有一种共享内存方式的进程通信方法采用一定的补救机制,也即,进程A发送数据到共享内存区中,进程B收到消息并操作,在执行完毕后通知进程A,此时进程A才能再次进行对共享内存区的读写。但如果采用上述补救机制,进程A就不能在需要写数据的时候随时写入,而是需要等待进程B执行完毕才可以进行下一次的操作,这就严重影响了进程A的执行效率和进程的通信效率,例如加载浏览器页面的效率等都会受到影响。
总之,需要本领域技术人员迫切解决的一个技术问题就是:如何能够提高进程的执行准确率、执行效率和进程的通信效率。
发明内容
本申请所要解决的技术问题是提供一种进程通信方法和装置,能够提高进程的执行准确率、执行效率和进程的通信效率。
为了解决上述问题,本申请公开了一种进程通信方法,包括:
源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;
源进程向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。
优选的,所述源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段的步骤,包括:
对发送给目标进程的数据进行序列化操作,并将序列化操作完毕后的数据存储至相应的序列化内存;所述序列化内存的序列化对象中记录有序列化内存的首地址和当前地址;
分配长度与所述序列化内存的长度相等的相应的内存空间段;
将所述序列化内存中存储的数据拷贝至该内存空间段。
优选的,所述对发送给目标进程的数据进行序列化操作的步骤,包括:
采用重载运算符对发送给目标进程的数据进行序列化操作,其中不同数据类型的数据对应不同的重载运算符。
优选的,所述方法还包括:
源进程接收来自目标进程的数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
源进程依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段。
优选的,所述源进程依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段的步骤,包括:
源进程依据该数据处理完毕消息中携带的源进程的进程标识,获得源进程的进程对象句柄;
源进程依据源进程的进程对象句柄及该内存空间段的地址信息,释放相应的内存空间段。
优选的,所述地址信息包括:内存空间段的首地址以及长度。
另一方面,本申请还公开了一种进程通信方法,包括:
目标进程接收来自源进程的数据接收消息,该数据接收消息中携带有源进程的相应内存空间段的地址信息以及源进程的进程标识;
目标进程依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据。
优选的,所述目标进程依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据的步骤,包括:
目标进程依据该数据接收消息中携带的源进程的进程标识,获得源进程的进程对象句柄;
目标进程依据源进程的进程对象句柄及该数据接收消息中携带的该内存空间段的地址信息,从相应源进程的相应内存空间段读取数据。
优选的,所述方法还包括:
目标进程向源进程发送数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识。
优选的,所述地址信息包括:内存空间段的首地址以及长度。
另一方面,本申请还公开了一种进程通信装置,包括:
序列化内存空间获取模块,用于将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;及
数据接收消息发送模块,用于向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。
优选的,所述序列化内存空间获取模块包括:
数据序列化子模块,用于对发送给目标进程的数据进行序列化操作;
序列化存储子模块,用于将序列化操作完毕后的数据存储至相应的序列化内存;所述序列化内存的序列化对象中记录有序列化内存的首地址和当前地址;
内存空间段分配子模块,用于分配长度与所述序列化内存的长度相等的相应的内存空间段;及
数据拷贝子模块,用于将所述序列化内存中存储的数据拷贝至该内存空间段。
优选的,所述数据序列化子模块,具体用于采用重载运算符对发送给目标进程的数据进行序列化操作,其中不同数据类型的数据对应不同的重载运算符。
优选的,所述装置还包括:
接收模块,用于接收来自目标进程的数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
释放模块,用于依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段。
优选的,所述释放模块包括:
句柄获取子模块,用于依据该数据处理完毕消息中携带的源进程的进程标识,获得源进程的进程对象句柄;及
释放子模块,用于依据源进程的进程对象句柄及该内存空间段的地址信息,释放相应的内存空间段。
优选的,所述地址信息包括:内存空间段的首地址以及长度。
另一方面,本申请还公开了一种进程通信装置,包括:
数据接收消息接收模块,用于接收来自源进程的数据接收消息,该数据接收消息中携带有源进程的相应的内存空间段的地址信息以及源进程的进程标识;及
读取模块,用于依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据。
优选的,所述读取模块包括:
句柄获取子模块,用于依据该数据接收消息中携带的源进程的进程标识,获得源进程的进程对象句柄;及
读取子模块,用于依据源进程的进程对象句柄及该数据接收消息中携带的该内存空间段的地址信息,从相应源进程的相应内存空间段读取数据。
优选的,所述装置还包括:
消息发送模块,用于向源进程发送数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识。
优选的,所述地址信息包括:内存空间段的首地址以及长度。
与现有技术相比,本申请具有以下优点:
本申请的源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段,再发送消息通知目标进程;因为不同的数据(例如数据1和数据2)分别存放在不同的相应的内存空间段(例如内存空间段1和内存空间段2),这样,即使源进程在目标进程读取数据1之前将数据2写入了内存空间段2,并发消息通知目标进程去读取数据2,目标进程也不会读取错数据,并且,源进程不必等待目标进程执行完读取等处理操作,即可发送新的数据,总之,本申请能够在保证读写数据不错乱的同时提高进程的执行效率和进程的通信效率。
另外,本申请将序列化操作完毕后的数据作为内存空间段的存储对象,故本申请可以支持无限深度数据的存储,能够方便大量复杂数据结构的交互。
附图说明
图1是现有技术一种共享内存方式的进程通信方法的流程示意图;
图2是本申请一种共享内存方式的进程通信方法的流程示意图;
图3是本申请一种进程通信方法实施例1的流程图;
图4是本申请一种进程通信方法实施例2的流程图;
图5是本申请一种进程通信装置实施例1的流程图;
图6是本申请一种进程通信装置实施例2的流程图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请的源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段,再发送消息通知目标进程。
参照图2,示出了本申请一种共享内存方式的进程通信方法的流程示意图,其中,进程A和进程B使用同一共享内存区,进程A将数据1序列化至共享内存区中的内存空间段1,并通知进程B去接收,此时进程B可能正忙于其他事务,而没有及时对共享内存区中的数据进行操作;此时若进程A将数据2序列化至内存空间段2,进程B现在开始处理消息,并对共享内存区中的数据进行操作。因为不同的数据(例如数据1和数据2)分别存放在不同的相应的内存空间段(例如内存空间段1和内存空间段2),这样,即使进程A在进程B读取数据1之前将数据2写入了内存空间段2,并发消息通知B进程去读取数据2,进程B也不会读取错数据,并且,进程A不必等待进程B执行完读取等处理操作即可发送新的数据,总之,本申请能够在保证读写数据不错乱的同时提高进程的执行效率和进程的通信效率。
参照图3,示出了本申请一种进程通信方法实施例1的流程图,所述进程作为进程通信的源进程,具体可以包括:
步骤301、源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;
步骤302、源进程向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。
本申请可以用于任意进程间的通信,虽然进程的用户空间是互相独立的,但源进程可以在共享内存区开放若干个内存空间段以在不同进程间传播或交换数据。
在本申请的一种优选实施例中,所述地址信息具体可以包括:内存空间段的首地址以及长度。
在本申请的一种优选实施例中,所述源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段的步骤,具体可以包括:
步骤A1、对发送给目标进程的数据进行序列化操作,并将序列化操作完毕后的数据存储至相应的序列化内存;所述序列化内存的序列化对象中记录有序列化内存的首地址和当前地址;
在将数据存放至共享内存区前,首先对数据进行序列化操作,并存储在源进程的独立内存区(本申请中指序列化内存)中。本申请将序列化操作完毕后的数据作为内存空间段的存储对象,故本申请可以支持无限深度数据的存储,能够方便大量复杂数据结构的交互。
在具体实现中,可以创建序列化对象,并在该序列化对象中记录序列化内存的首地址和当前地址和内存总大小等信息。这样,可以根据内存总大小,依次向对应的序列化内存中存放序列化操作完毕后的数据。例如,对应的序列化内存的内存总大小为4GB,首地址为0x00000000,假设发送给目标进程的数据有5条,序列化操作后的大小分别为0.1G、0.2G、0.5G、0.6G、0.8G,假设依次往该序列化内存中存放这5条数据,则当前地址随着每次存放而不断变化。
序列化操作是将对象状态转换为可保持或传输的格式的过程。本申请可以适用于各种各样的序列化操作。在本申请的一种优选实施例中,所述对发送给目标进程的数据进行序列化操作的步骤,可以进一步包括:采用重载运算符对发送给目标进程的数据进行序列化操作,其中不同数据类型的数据对应不同的重载运算符。
本优选实施例使用重载运算符<<,将要发送的数据序列化。假设序列化对象的名称为CSerializeObject&obj,则可以采用obj<<m_nld;obj<<m_strGenName等重载运算符。“<<”运算符经过多次重载,可以针对不同的数据类型执行了不同的内存分配。例如针对int类型的数据,分配方式可以为:memcpy(pBuff,&nValue,sizeof(int));而针对string类型的数据,分配方式可以为:_tcscpy(pStr,strValue.c_str());对于vector<int>这种向量类型的数据,采用的分配方式则可以是:
Figure BDA0000148470140000071
Figure BDA0000148470140000081
对于其他类型的数据所采用的重载运算符请相互参照即可,在此不进行一一列举。
步骤A2、分配长度与所述序列化内存的长度相等的相应的内存空间段;
b.在序列化操作完毕之后,需要调用obj.GetBuffer(&lpData,&dwLength)当前地址减去首地址即为所述序列化内存的长度,然后可以在共享内存空间上分配长度与所述序列化内存的长度相等的相应的内存空间段。
在本申请的一种应用示例中,可以调用VirtualAllocEx(GetCurrentProcess(),NULL,sizeof(TWHMessage),MEM_COMMIT,PAGE_READWRITE)在进程的共享内存空间上获得一块内存,其中,第一个参数GetCurrentProcess()可以获得进程句柄,第二个参数为NULL表示由函数自己决定分配到哪儿,第三个参数是内存的大小,第四个参数表示分配一块内存空间,第五个参数表示允许读写操作。通常VirtualAllocEx函数的返回值就是该内存空间段的地址信息。
步骤A3、将所述序列化内存中存储的数据拷贝至该内存空间段。
在实际应用中,可以调用memcpy函数将所述序列化内存中存储的数据拷贝到步骤A2分配的内存空间中。
在目标进程读取并处理完数据后,源进程需要清理相应的内存空间段,否则只分配不释放会造成内存泄露问题。于是,在本申请的一种优选实施例中,所述方法还可以包括:
步骤B1、源进程接收来自目标进程的数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
步骤B2、源进程依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段。
在本申请的一种优选实施例中,所述源进程依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段的步骤,具体可以包括:
步骤B21、源进程依据该数据处理完毕消息中携带的源进程的进程标识,获得源进程的进程对象句柄;
步骤B22、源进程依据源进程的进程对象句柄及该内存空间段的地址信息,释放相应的内存空间段。
需要说明的是,在本申请的一种优选实施例中,在使用完源进程的进程对象句柄之后需要通过CloseHandle( )函数将其关闭。如果忘记关闭源进程的进程对象句柄,在程序继续运行时将会出现资源泄漏,虽然在程序退出运行时,操作系统会自动关闭在进程中已经打开但未关闭的任何内核对象。但是在进程的运行过程中,势必会积累过多的资源句柄。因此在不再需要使用对象的时候通过CloseHandle( )将其予以关闭。
参照图4,示出了本申请一种进程通信方法实施例2的流程图,所述进程作为进程通信的目标进程,具体可以包括:
步骤401、目标进程接收来自源进程的数据接收消息,该数据接收消息中携带有源进程的相应的内存空间段的地址信息以及源进程的进程标识;
步骤402、目标进程依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据。
在本申请的一种优选实施例中,所述地址信息具体可以包括:内存空间段的首地址以及长度。
在本申请的一种优选实施例中,所述目标进程依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据的步骤,可以进一步包括:
步骤C1、目标进程依据该数据接收消息中携带的源进程的进程标识,获得源进程的进程对象句柄;
步骤C2、目标进程依据源进程的进程对象句柄及该数据接收消息中携带的该内存空间段的地址信息,从相应源进程的相应内存空间段读取数据。
在本申请的一种优选实施例中,所述方法还可以包括:目标进程向源进程发送数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识。该数据处理完毕消息可以通知源进程数据处理完毕,方便源进程及时释放相应的内存。
需要说明的是,在从相应源进程的相应内存空间段读取数据后,由于读取的数据为序列化操作完毕后的数据,在处理数据的过程中,目标进程可以根据需要选择是否将所读取的数据进行反序列化,也即可以将流转换为对象。
同理,为了避免程序运行过程中出现资源泄漏,在本申请的一种优选实施例中,在使用完源进程的进程对象句柄之后需要通过CloseHandle( )函数将其关闭。
为使本领域技术人员更好地理解本申请,现提供一种进程通信方法的示例,该示例具体可以包括如下步骤:
步骤S1、源进程在进程的共享内存空间上分配一个内存空间段,并将序列化操作完毕的数据存储至该内存空间段,该序列化操作可以保证将结构体中任意深度的数据结构分配至内存空间,保证数据的深层拷贝;具体可以报考:
步骤S11、在发送数据前,对要发送的数据进行序列化操作,并将序列化操作完毕后的数据存储至相应的序列化内存,创建CSerializeObject&obj对象,该对象中记录了序列化内存的首地址,当前地址,内存总大小等信息;
步骤S12、在序列化操作完毕之后,调用obj.GetBuffer(&lpData,&dwLength)来取得对数据序列化后的内存首地址及长度;
步骤S13、调用VirtualAllocEx(GetCurrentProcess(),NULL,sizeof(TWHMessage),MEM_COMMIT,PAGE_READWRITE)在进程的共享内存空间上获得一个内存空间段,该内存空间段的长度与所述序列化内存的长度相等,VirtualAllocEx函数的返回值就是该内存空间段的地址信息;
步骤S14、调用memcpy将之前序列化的内存拷贝到上一步分配的内存空间中;
步骤S2、源进程发送消息通知目标进程进行数据接收,并且在消息的参数中附带了上一步分配的内存空间段的地址信息以及源进程的进程ID;
步骤S3、目标进程收到消息后,读取数据;具体可以包括:
步骤S31、目标进程调用OpenProcess函数(重要参数为上一步中的源进程进程ID)获得源进程的进程对象句柄;
步骤S32、目标进程调用ReadProcessMemory函数(重要参数为上一步的源进程的进程对象句柄及地址信息),获得数据;
步骤S33、调用CloseHandle( )函数关闭源进程的进程对象句柄;
步骤S34、处理数据;
步骤S4、目标进程发消息通知源进程数据处理完;
步骤S5、源进程调用StructVirtualFree函数释放分配的内存;
步骤S51、调用OpenProcess函数(重要参数为源进程进程ID),获得源进程的进程对象句柄;
步骤S52、调用VirtualFreeEx函数释放(重要参数为上一步取得的进程句柄,以及之前分配内存的地址信息);
步骤S53、调用CloseHandle( )函数关闭源进程的进程对象句柄。
本申请进程通信的方法可以应用于各种程序中,现提供一种浏览器中进程通信的方法流程示例;
参照表1,示出了本示例中用到的一些函数的功能和参数释义。
Figure BDA0000148470140000111
Figure BDA0000148470140000121
该示例涉及页面A的Frame进程和页面B的BHO进程在加载各自的页面的过程中均会用到彼此的数据来填充各自的页面,具体而言,Frame进程异步发送数据到共享内存空间的一个内存空间段,BHO进程从该内存空间段读取数据,Frame进程在BHO进程处理完毕后释放内存FramePost2Browser(HBROWSER hBrowser,UINT uMessageId),该示例具体可以包括如下步骤:
步骤T1、Frame进程在进程的共享内存空间上分配一个内存空间段,并将序列化操作完毕的数据存储至该内存空间段;
LPVOID lpData=StructVirtualAlloc();
步骤T2、Frame进程异步发送消息至BHO进程,该消息中携带有该内存空间段的地址信息以及Frame进程的进程标识;
Figure BDA0000148470140000122
步骤T3、BHO进程依据消息中携带有该内存空间段的地址信息以及Frame进程的进程标识读取数据;
CExtExtensionFunc::ReadStructMemory(lpSrc,&message,sizeof(TWHMessage),dwProcessId)
步骤T4、BHO进程向Frame进程发送数据处理完毕消息WM_BHO_FREEBUFFER,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
步骤T5、源进程依据该数据处理完毕消息释放相应的内存:CMessageObject::StructVirtualFree(lpSrc),其中,lpSrc为共享内存空间的基地址。
需要说明的是,上述异步发送数据的方式只是作为示例,实际上本申请也可以应用于数据的同步发送;另外,Frame进程和BHO进程之间可以互发数据,本申请对具体的应用不加以限制。
与前述进程通信方法实施例1相应,本申请还提供了一种进程通信装置实施例1,所述进程作为进程通信的源进程,参照图5所示的结构图,具体可以包括:
序列化内存空间获取模块501,用于将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;及
数据接收消息发送模块502,用于向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。
在本申请的一种优选实施例中,所述地址信息具体可以包括:内存空间段的首地址以及长度。
在本申请的一种优选实施例中,所述序列化内存空间获取模块501具体可以包括:
数据序列化子模块,用于对发送给目标进程的数据进行序列化操作;
序列化存储子模块,用于将序列化操作完毕后的数据存储至相应的序列化内存;所述序列化内存的序列化对象中记录有序列化内存的首地址和当前地址;
内存空间段分配子模块,用于分配长度与所述序列化内存的长度相等的相应的内存空间段;及
数据拷贝子模块,用于将所述序列化内存中存储的数据拷贝至该内存空间段。
在本申请实施例中,优选的是,所述数据序列化子模块,可具体用于采用重载运算符对发送给目标进程的数据进行序列化操作,其中不同数据类型的数据对应不同的重载运算符。
在本申请的另一种优选实施例中,所述装置还可以包括:
接收模块,用于接收来自目标进程的数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
释放模块,用于依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段。
在本申请的再一种优选实施例中,所述释放模块可以进一步包括:
句柄获取子模块,用于依据该数据处理完毕消息中携带的源进程的进程标识,获得源进程的进程对象句柄;及
释放子模块,用于依据源进程的进程对象句柄及该内存空间段的地址信息,释放相应的内存空间段。
对于装置实施例1而言,由于其与方法实施例1基本相似,所以描述的比较简单,相关之处参见方法实施例1的部分说明即可。
与前述方法实施例2相应,本申请还提供了一种进程通信装置,所述进程作为进程通信的目标进程,参照图6所示的结构图,具体可以包括:
数据接收消息接收模块601,用于接收来自源进程的数据接收消息,该数据接收消息中携带有源进程的相应的内存空间段的地址信息以及源进程的进程标识;及
读取模块602,用于依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据。
在本申请的一种优选实施例中,所述地址信息具体可以包括:内存空间段的首地址以及长度。
在本申请的一种优选实施例中,所述读取模块602可以进一步包括:
句柄获取子模块,用于依据该数据接收消息中携带的源进程的进程标识,获得源进程的进程对象句柄;及
读取子模块,用于依据源进程的进程对象句柄及该数据接收消息中携带的该内存空间段的地址信息,从相应源进程的相应内存空间段读取数据。
在本申请的另一种优选实施例中,所述装置还可以包括:
消息发送模块,用于向源进程发送数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识。
对于装置实施例2而言,由于其与方法实施例2基本相似,所以描述的比较简单,相关之处参见方法实施例2的部分说明即可。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本申请所提供的一种进程通信方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (20)

1.一种进程通信方法,其特征在于,包括:
源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;
源进程向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。
2.如权利要求1所述的方法,其特征在于,所述源进程将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段的步骤,包括:
对发送给目标进程的数据进行序列化操作,并将序列化操作完毕后的数据存储至相应的序列化内存;所述序列化内存的序列化对象中记录有序列化内存的首地址和当前地址;
分配长度与所述序列化内存的长度相等的相应的内存空间段;
将所述序列化内存中存储的数据拷贝至该内存空间段。
3.如权利要求2所述的方法,其特征在于,所述对发送给目标进程的数据进行序列化操作的步骤,包括:
采用重载运算符对发送给目标进程的数据进行序列化操作,其中不同数据类型的数据对应不同的重载运算符。
4.如权利要求1至3中任一项所述的方法,其特征在于,还包括:
源进程接收来自目标进程的数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
源进程依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段。
5.如权利要求4所述的方法,其特征在于,所述源进程依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段的步骤,包括:
源进程依据该数据处理完毕消息中携带的源进程的进程标识,获得源进程的进程对象句柄;
源进程依据源进程的进程对象句柄及该内存空间段的地址信息,释放相应的内存空间段。
6.如权利要求1所述的方法,其特征在于,所述地址信息包括:内存空间段的首地址以及长度。
7.一种进程通信方法,其特征在于,包括:
目标进程接收来自源进程的数据接收消息,该数据接收消息中携带有源进程的相应内存空间段的地址信息以及源进程的进程标识;
目标进程依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据。
8.如权利要求7所述的方法,其特征在于,所述目标进程依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据的步骤,包括:
目标进程依据该数据接收消息中携带的源进程的进程标识,获得源进程的进程对象句柄;
目标进程依据源进程的进程对象句柄及该数据接收消息中携带的该内存空间段的地址信息,从相应源进程的相应内存空间段读取数据。
9.如权利要求7或8所述的方法,其特征在于,还包括:
目标进程向源进程发送数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识。
10.如权利要求7所述的方法,其特征在于,所述地址信息包括:内存空间段的首地址以及长度。
11.一种进程通信装置,其特征在于,包括:
序列化内存空间获取模块,用于将发送给目标进程的数据序列化至其虚拟地址空间的内存空间段;及
数据接收消息发送模块,用于向目标进程发送数据接收消息,该数据接收消息中携带有该内存空间段的地址信息以及源进程的进程标识。
12.如权利要求11所述的装置,其特征在于,所述序列化内存空间获取模块包括:
数据序列化子模块,用于对发送给目标进程的数据进行序列化操作;
序列化存储子模块,用于将序列化操作完毕后的数据存储至相应的序列化内存;所述序列化内存的序列化对象中记录有序列化内存的首地址和当前地址;
内存空间段分配子模块,用于分配长度与所述序列化内存的长度相等的相应的内存空间段;及
数据拷贝子模块,用于将所述序列化内存中存储的数据拷贝至该内存空间段。
13.如权利要求12所述的装置,其特征在于,所述数据序列化子模块,具体用于采用重载运算符对发送给目标进程的数据进行序列化操作,其中不同数据类型的数据对应不同的重载运算符。
14.如权利要求11至13中任一项所述的装置,其特征在于,还包括:
接收模块,用于接收来自目标进程的数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识;
释放模块,用于依据该数据处理完毕消息中携带的该内存空间段的地址信息以及源进程的进程标识,释放相应的内存空间段。
15.如权利要求14所述的装置,其特征在于,所述释放模块包括:
句柄获取子模块,用于依据该数据处理完毕消息中携带的源进程的进程标识,获得源进程的进程对象句柄;及
释放子模块,用于依据源进程的进程对象句柄及该内存空间段的地址信息,释放相应的内存空间段。
16.如权利要求11所述的装置,其特征在于,所述地址信息包括:内存空间段的首地址以及长度。
17.一种进程通信装置,其特征在于,包括:
数据接收消息接收模块,用于接收来自源进程的数据接收消息,该数据接收消息中携带有源进程的相应的内存空间段的地址信息以及源进程的进程标识;及
读取模块,用于依据该数据接收消息中携带的相应的内存空间段的地址信息以及源进程的进程标识,从相应源进程的相应内存空间段读取数据。
18.如权利要求17所述的装置,其特征在于,所述读取模块包括:
句柄获取子模块,用于依据该数据接收消息中携带的源进程的进程标识,获得源进程的进程对象句柄;及
读取子模块,用于依据源进程的进程对象句柄及该数据接收消息中携带的该内存空间段的地址信息,从相应源进程的相应内存空间段读取数据。
19.如权利要求17或18所述的装置,其特征在于,还包括:
消息发送模块,用于向源进程发送数据处理完毕消息,该数据处理完毕消息中携带有该内存空间段的地址信息以及源进程的进程标识。
20.如权利要求17或18所述的装置,其特征在于,所述地址信息包括:内存空间段的首地址以及长度。
CN201210089581.1A 2012-03-29 2012-03-29 一种进程通信方法和装置 Active CN102662775B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210089581.1A CN102662775B (zh) 2012-03-29 2012-03-29 一种进程通信方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210089581.1A CN102662775B (zh) 2012-03-29 2012-03-29 一种进程通信方法和装置

Publications (2)

Publication Number Publication Date
CN102662775A true CN102662775A (zh) 2012-09-12
CN102662775B CN102662775B (zh) 2016-05-11

Family

ID=46772274

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210089581.1A Active CN102662775B (zh) 2012-03-29 2012-03-29 一种进程通信方法和装置

Country Status (1)

Country Link
CN (1) CN102662775B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104102550A (zh) * 2013-04-12 2014-10-15 南京南瑞继保电气有限公司 一种多主机进程间通信的方法
CN104571953A (zh) * 2014-12-25 2015-04-29 珠海金山网络游戏科技有限公司 一种扩展进程中内存地址控制的方法
CN105159786A (zh) * 2015-07-03 2015-12-16 北京奇虎科技有限公司 一种进程间通信的方法和装置
CN105183570A (zh) * 2015-09-22 2015-12-23 上海斐讯数据通信技术有限公司 向核心进程发送大量qinq配置数据的系统及其方法
CN106021000A (zh) * 2016-06-02 2016-10-12 北京百度网讯科技有限公司 用于机器人操作系统的共享内存管理方法和装置
CN107832240A (zh) * 2017-10-27 2018-03-23 北京腾凌科技有限公司 一种基于信息记录结构体的dma数据交互方法和装置
CN109002350A (zh) * 2018-05-23 2018-12-14 中国石油天然气集团有限公司 一种集群系统中的进程通信方法及装置
CN111381904A (zh) * 2020-05-29 2020-07-07 江苏原力数字科技股份有限公司 一种基于共享内存的实时动画驱动方法及插件
CN111796948A (zh) * 2020-07-02 2020-10-20 长视科技股份有限公司 一种共享内存访问方法、装置、计算机设备和存储介质
CN111858258A (zh) * 2020-07-29 2020-10-30 浪潮电子信息产业股份有限公司 一种内存监控方法、装置及电子设备和存储介质
CN112506684A (zh) * 2021-02-05 2021-03-16 全时云商务服务股份有限公司 一种跨进程快速传送大数据的方法、系统及存储介质
CN112749027A (zh) * 2020-12-31 2021-05-04 深圳市迅雷网络技术有限公司 渲染进程间的通信方法、电子设备以及可读存储装置
US11132404B2 (en) 2018-05-30 2021-09-28 Apple Inc. Techniques for facilitating communications between isolated processes executing within a web browser

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6868437B1 (en) * 2001-05-18 2005-03-15 Agilent Technologies, Inc. System and method for interprocess communication of remote procedure call messages utilizing shared memory
CN101667144A (zh) * 2009-09-29 2010-03-10 北京航空航天大学 一种基于共享内存的虚拟机通信方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6868437B1 (en) * 2001-05-18 2005-03-15 Agilent Technologies, Inc. System and method for interprocess communication of remote procedure call messages utilizing shared memory
CN101667144A (zh) * 2009-09-29 2010-03-10 北京航空航天大学 一种基于共享内存的虚拟机通信方法

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104102550A (zh) * 2013-04-12 2014-10-15 南京南瑞继保电气有限公司 一种多主机进程间通信的方法
CN104571953A (zh) * 2014-12-25 2015-04-29 珠海金山网络游戏科技有限公司 一种扩展进程中内存地址控制的方法
CN104571953B (zh) * 2014-12-25 2017-10-17 珠海金山网络游戏科技有限公司 一种扩展进程中内存地址控制的方法
CN105159786B (zh) * 2015-07-03 2018-10-30 北京奇虎科技有限公司 一种进程间通信的方法和装置
CN105159786A (zh) * 2015-07-03 2015-12-16 北京奇虎科技有限公司 一种进程间通信的方法和装置
CN105183570A (zh) * 2015-09-22 2015-12-23 上海斐讯数据通信技术有限公司 向核心进程发送大量qinq配置数据的系统及其方法
CN106021000A (zh) * 2016-06-02 2016-10-12 北京百度网讯科技有限公司 用于机器人操作系统的共享内存管理方法和装置
CN106021000B (zh) * 2016-06-02 2018-06-01 北京百度网讯科技有限公司 用于机器人操作系统的共享内存管理方法和装置
CN107832240A (zh) * 2017-10-27 2018-03-23 北京腾凌科技有限公司 一种基于信息记录结构体的dma数据交互方法和装置
CN107832240B (zh) * 2017-10-27 2020-06-09 北京腾凌科技有限公司 一种基于信息记录结构体的dma数据交互方法和装置
CN109002350A (zh) * 2018-05-23 2018-12-14 中国石油天然气集团有限公司 一种集群系统中的进程通信方法及装置
CN109002350B (zh) * 2018-05-23 2021-08-03 中国石油天然气集团有限公司 一种集群系统中的进程通信方法及装置
US11132404B2 (en) 2018-05-30 2021-09-28 Apple Inc. Techniques for facilitating communications between isolated processes executing within a web browser
US11822604B2 (en) 2018-05-30 2023-11-21 Apple Inc. Techniques for facilitating communications between isolated processes executing within a web browser
CN111381904A (zh) * 2020-05-29 2020-07-07 江苏原力数字科技股份有限公司 一种基于共享内存的实时动画驱动方法及插件
CN111796948A (zh) * 2020-07-02 2020-10-20 长视科技股份有限公司 一种共享内存访问方法、装置、计算机设备和存储介质
CN111858258A (zh) * 2020-07-29 2020-10-30 浪潮电子信息产业股份有限公司 一种内存监控方法、装置及电子设备和存储介质
CN112749027A (zh) * 2020-12-31 2021-05-04 深圳市迅雷网络技术有限公司 渲染进程间的通信方法、电子设备以及可读存储装置
CN112506684A (zh) * 2021-02-05 2021-03-16 全时云商务服务股份有限公司 一种跨进程快速传送大数据的方法、系统及存储介质

Also Published As

Publication number Publication date
CN102662775B (zh) 2016-05-11

Similar Documents

Publication Publication Date Title
CN102662775A (zh) 一种进程通信方法和装置
CN102402596B (zh) 一种主从分离数据库的读写方法和系统
CN101248405B (zh) 使用并发域的多线程化
CN100442238C (zh) 异步复制数据的方法和装置
CN103019810A (zh) 具有不同执行优先级的计算任务的调度和管理
CN102831120A (zh) 一种数据处理方法及系统
CN102629221B (zh) 用于分布式共享存储的任务同步方法、装置及系统
KR20080005523A (ko) 동시성 도메인들과의 멀티 쓰레딩
CN107391400A (zh) 一种支持复杂访存指令的内存扩展方法和系统
CN101025695A (zh) 多核计算机系统驱动程序的支持多执行绪指令执行的方法
CN105183698A (zh) 一种基于多核dsp的控制处理系统和方法
CN104572781A (zh) 一种交易日志产生方法和装置
CN110704465B (zh) 一种处理业务工单表的方法、装置及存储介质
CN110704438B (zh) 一种区块链中布隆过滤器的生成方法及装置
CN108021449A (zh) 一种协程实现方法、终端设备及存储介质
CN110471754A (zh) 作业调度中的数据展示方法、装置、设备及存储介质
CN102779076B (zh) 一种浏览器中进程间通信的方法和装置
CN110955719B (zh) 一种数据存取处理设备、系统和方法
CN110245024A (zh) 静态存储块的动态分配系统及其方法
CN104572483A (zh) 动态内存管理装置及方法
CN108958903A (zh) 嵌入式多核中央处理器任务调度方法与装置
CN101324863B (zh) 一种同步静态存储器的控制装置及方法
CN115809126A (zh) 混合部署场景下的作业调度方法、装置及电子设备
CN110704051B (zh) 一种Unity的界面绑定数据方法
CN101937387B (zh) 一种测试参数的生成方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: BEIJING QIHU TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: QIZHI SOFTWARE (BEIJING) CO., LTD.

Effective date: 20121025

Owner name: QIZHI SOFTWARE (BEIJING) CO., LTD.

Effective date: 20121025

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100016 CHAOYANG, BEIJING TO: 100088 XICHENG, BEIJING

TA01 Transfer of patent application right

Effective date of registration: 20121025

Address after: 100088 Beijing city Xicheng District xinjiekouwai Street 28, block D room 112 (Desheng Park)

Applicant after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Applicant after: Qizhi software (Beijing) Co.,Ltd.

Address before: The 4 layer 100016 unit of Beijing city Chaoyang District Jiuxianqiao Road No. 14 Building C

Applicant before: Qizhi software (Beijing) Co.,Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220714

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.