CN104714792A - 多进程共享数据处理方法和装置 - Google Patents
多进程共享数据处理方法和装置 Download PDFInfo
- Publication number
- CN104714792A CN104714792A CN201310695301.6A CN201310695301A CN104714792A CN 104714792 A CN104714792 A CN 104714792A CN 201310695301 A CN201310695301 A CN 201310695301A CN 104714792 A CN104714792 A CN 104714792A
- Authority
- CN
- China
- Prior art keywords
- shared
- data
- shared data
- mirror image
- image data
- 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种多进程共享数据处理方法和装置。该多进程共享数据处理方法通过多个进程读取共享数据,多个进程包括第一进程和第二进程,该多进程共享数据处理方法包括:启动第一进程;第一进程读取共享数据;第一进程在读取共享数据之后,将共享数据保存为镜像数据;启动第二进程;以及第二进程通过读取镜像数据读取共享数据。通过本发明,解决了现有技术中进程读写内存效率比较低的问题,进而达到了提高进程读写内存效率的效果。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种多进程共享数据处理方法和装置。
背景技术
现有技术方案解决多个进程间数据共享,一般都采用共享内存的方式,也就是多个进程读写同一块物理内存,通过其中某个进程来维护共享内存的共享数据。
现有技术有如下缺点:
为了保证多个进程读取数据的一致性,进程在访问共享内存前需要加线程锁。线程锁会降低进程读写内存的效率,特别是在多进程频繁访问共享内存的情况下,线程锁更大程度的减低进程读写内存的效率。
共享内存只是共享数据存储区域,不能及时更新共享数据。例如A进程更新了共享内存中的数据,B进程并不知道,需要由A进程来主动通知B进程,在进程较多的情况下,上述更新共享数据的方式不仅繁琐,还大大降低了进程读写内存的效率。
针对现有技术中进程读写内存效率比较低的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例的主要目的在于提供一种多进程共享数据处理方法和装置,以解决现有技术中现有技术中进程读写内存效率比较低的问题。
为了实现上述目的,根据本发明实施例的一个方面,提供了一种多进程共享数据处理方法。该方法包括:通过多个进程读取共享数据,多个进程包括第一进程和第二进程,多进程共享数据处理方法包括:启动第一进程;第一进程读取共享数据;第一进程在读取共享数据之后,将共享数据保存为镜像数据;启动第二进程;以及第二进程通过读取镜像数据读取共享数据。
为了实现上述目的,根据本发明实施例的另一方面,提供了一种多进程共享数据处理装置。该装置包括:多进程共享数据处理装置通过多个进程读取共享数据,多个进程包括第一进程和第二进程,多进程共享数据处理装置包括:第一启动单元,用于启动第一进程;第一读取单元,用于通过第一进程读取共享数据;保存单元,用于在第一进程在读取共享数据之后,将共享数据保存为镜像数据;第二启动单元,用于启动第二进程;以及第二读取单元,用于第二进程通过读取镜像数据读取共享数据。
通过本发明实施例,解决了现有技术中进程读写内存效率比较低的问题,进而达到了提高进程读写内存效率的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明第一实施例的多进程共享数据处理方法的流程图;
图2是根据本发明第二实施例的多进程共享数据处理方法的流程图;
图3是根据本发明实施例的多进程共享数据处理方法的示意图;
图4是根据本发明第三实施例的多进程共享数据处理方法的流程图;
图5是根据本发明实施例的多进程共享数据处理方法的数据处理流程图;
图6是根据本发明第一实施例的多进程共享数据处理装置的示意图;
图7是根据本发明第二实施例的多进程共享数据处理装置的示意图;以及
图8是根据本发明第三实施例的多进程共享数据处理装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种多进程共享数据处理方法。
为了便于对本发明实施方案的理解,首先介绍几个术语,具体如下:
进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。每一个进程都有它自己的地址空间,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。
进程间通信(Inter-Process Communication,简称IPC),提供了各种进程间通信的方法。操作系统提供的IPC方式包括:命名管道、消息、信号量、共享内存、网络Socket等。
共享内存:被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。
线程锁:在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。线程锁就是同步访问技术,具体的实现包含:互斥量、临界区、信号量等。
图1是根据本发明第一实施例的多进程共享数据处理方法的流程图。如图所示,该数据处理方法包括如下步骤:
本发明实施例提供的多进程共享数据处理方法中,可以通过多个进程读取共享数据,其中,多个进程包括第一进程和第二进程。第一进程和第二进程是多个进程中的任意一个进程。
步骤S101,启动第一进程。
步骤S102,第一进程读取共享数据。
步骤S103,第一进程在读取共享数据之后,将共享数据保存为镜像数据。
步骤S104,启动第二进程。
步骤S105,第二进程通过读取镜像数据读取共享数据。
在启动第一进程之后,第一进程读取共享数据,在读取共享数据之后,第一进程将共享数据保存为镜像数据。如果第二进程需要读取共享数据,则启动第二进程之后,第二进程读取第一进程保存的镜像数据,第二进程通过读取镜像数据读取共享数据。
镜像数据与共享数据相同,第一进程在读取共享数据之后,将共享数据保存在第一进程的数据区域,该数据区域可以是一个虚拟内存或者其他可以用来保存数据的区域。
第二进程读取第一进程保存的镜像数据,而镜像数据通过保存共享数据得到,从而使得第二进程读取到的镜像数据与第一进程读取到的共享数据相同,即第二进程读取得到共享数据。
通过第一进程保存镜像数据,第二进程通过读取第一进程保存的镜像数据获得共享数据的方法,避免了第一进程和第二进程读写同一块物理内存,并且,在第一进程和第二进程读写共享数据的过程中,不需要在访问共享数据之前加线程锁,避免了线程锁导致的进程读取共享数据的效率较低的问题,从而提高了多个进程读取共享数据的效率。
图2是根据本发明第二实施例的多进程共享数据处理方法的流程图。该图示出了在第一进程读取共享数据之前,多进程共享数据处理方法包括如下步骤:
步骤S201,启动共享进程。共享进程中存储了共享数据。
步骤S202,共享进程接收第一进程的启动消息。第一进程的启动消息包含但不限于向共享进程请求共享数据的消息。
步骤S203,共享进程在接收到第一进程的启动消息之后,将共享数据发送至第一进程。第一进程准备接收第一进程发送的共享数据。
步骤S204,共享进程对第一进程进行注册。共享进程对第一进程注册之后,确定第一进程可以从共享进程中获取共享数据,并且,在共享数据发生改变时,共享进程根据注册信息,将共享数据发生更改的信息发送给第一进程,或者将更改后的共享数据发送给第一进程。另外,在第一进程修改共享数据时,可以将修改了共享数据的消息发送给共享进程,共享进程根据注册信息保存修改后的共享数据。
上述多进程共享数据处理流程如图3所示,第一进程10将向共享进程30发送启动消息,共享进程30接收第一进程10的启动消息,并将共享数据发送至第一进程10,共享进程30对第一进程10进程注册。第二进程20从第一进程10中获取镜像数据,从而获得共享数据。
需要说明的是,在共享进程对第一进程进行注册之后,如果第二进程通过第一进程读取共享数据,则共享进程接收第二进程读取注册请求,对第二进程进行注册。任何一个读取了共享数据的进程,共享进程对这些读取了共享数据的进程注册,使得所有读取共享数据的进程都能与共享进程进行通信。
对读取共享数据的进程进行注册,使得在共享进程中的共享数据发生更新时,将更新后的共享数据发送给已经注册的进程,或者在已经注册的进程中的镜像数据发生更新时,将更新后的共享数据发送给共享进程。通过这种方法,实现了智能更新共享数据的方法,无论是共享进程中的共享数据发生改变还是其他获取共享数据的进程中的镜像数据发生改变,都能即时将所有共享数据更改为更新后的共享数据。
图4是根据本发明第三实施例的多进程共享数据处理方法的流程图。该图示出了在第一进程读取共享数据之前,多进程共享数据处理方法包括如下步骤:
步骤S401,第一进程判断是否需要对共享数据进行修改。
步骤S402,第一进程在确定需要对共享数据进行修改后,修改共享数据对应的镜像数据。
步骤S403,第一进程将修改后的镜像数据发送至共享进程。
步骤S404,第二进程接收共享进程发送的修改后的共享数据,其中,共享数据在接收到修改后的镜像数据之后,对共享数据进行修改,并将修改后的共享数据发送至第二进程。
第一进程根据共享数据的内容判断是否需要对共享数据进行修改,如果第一进程确定需要对共享数据进行修改,第一进程修改共享数据对应的镜像数据。
第一进程对镜像数据进行修改之后,将修改后的镜像数据发送至共享进程,由于镜像数据与共享数据相同,因此,修改镜像数据相当于修改共享数据。共享进程接收修改后的镜像数据后,按照修改后的镜像数据修改共享数据,将共享数据修改为修改后的镜像数据。
在共享进程修改共享数据为修改后的镜像数据之后,通知第二进程共享数据已经发生更改,第二进程可以通过第一进程重新读取修改后的共享数据。
需要说明的是,上述第二进程是多个进程中的任一进程,且共享进程对第二进程进行过注册,因此,第二进程仅作为读取共享数据的注册过的进程中的任意一个进程。
应该理解的是,在共享进程中的共享数据修改之后,可以对所有已经注册过的进程发送共享数据已经修改的消息,注册过的所有进程根据共享数据已经修改的消息更新注册过的所有进程读取的共享数据。
在多个进程中的任意一个进程更新共享数据时,在将更新后的镜像数据发送给共享进程之后,共享进程可以通知所有注册了该共享数据的进程对读取的共享数据进行修改,使得所有进程获得的共享数据一致。由于可以通过多个进程的镜像数据更新多个进程读取的共享数据,从而提高了多个进程获取共享数据的效率。
在第一进程读取共享数据之前,启动共享进程,在启动共享进程之后,该多进程共享数据处理方法还包括:
共享进程创建消息窗口,其中,消息窗口用于接收第一进程和第二进程发送的进程间通信消息。
共享进程创建的消息窗口能够接收多个进程发送的进程间通信消息,进程间通信消息包括但不限于进程间的共享数据通信。进程间通信消息包括命名管道、消息、信号量、共享内存和网络套接字(scoket)等。
命名管道是一种简单的进程间通信机制,命名管道可以在同一台计算机的不同进程之间或者在跨越一个网络的不同计算机的不同进程之间,支持可靠的,单向或者双向的数据通信。由于命名管道利用重定向器,通过一个网络,在多个进程间建立通信,并不需要关心网络协议的细节,并且,命名管道具有较高的安全性。
信号量是在多线程环境下使用的一种装置,可以用来保证两个或者多个关键代码段不被开发并调用。在进入一个关键代码段之前,线程需要获取一个信号量,在该关键代码段完成之后,该线程释放信号量。其他需要进入该关键代码段的线程必须等待直到第一个线程释放信号量。
共享内存是指在多处理器的计算机系统中,可以被不同中央处理器访问的大容量内存。由于多个中央处理器需要快速访问存储器,这样就要对存储器进行缓存。任何一个缓存的数据被更新后,由于其他处理器也可能要存取数据,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是一种多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,多个程序间也可以通过共享内存来传递信息。
共享进程创建消息窗口之后,可以接收多个进程中的第一进程和第二进程发送的修改后的镜像数据的信息。
在第一进程对共享数据的镜像数据进行修改之后,共享进程接收第一进程通过进程间通信消息发送的修改后的镜像数据。
第一进程对共享数据对应的镜像数据进行修改之后,通过进程间通信消息将修改后的镜像数据发送至共享进程。
共享进程接收到修改后的镜像数据之后,按照修改后的镜像数据进行修改,目的是使得所有读取共享进程中的共享数据的进程能够读取到相同的共享数据,从而保证多个进程读取共享数据的一致性。
共享进程基于修改后的镜像数据对共享数据进行修改。
共享进程基于修改后的镜像数据对共享数据的修改,可以首先比较修改后的镜像数据与共享数据的不同,将与修改后的镜像数据不同的共享数据修改为与修改后的镜像数据相同,也可以直接用修改后的镜像数据替换共享数据。
共享进程通过进程间通信消息将修改的共享数据发送至第二进程。
共享进程将修改后的共享数据发送至第二进程,其中,第二进程是已经注册过共享进程的多个进程中的任意一个。
需要说明的是,上述过程仅用第一进程为例对本发明实施例的修改共享数据并将修改后的共享数据发送至其他进程,本发明实施例的第二进程也可以修改与共享数据对应的镜像数据,并将修改后的镜像数据发送给共享进程,再由共享进程将修改后的共享数据发送给其他已经注册的进程。
多个进程中的任意一个进程在对镜像数据进行修改之后,将修改后的镜像数据发送至共享进程,共享进程按照修改后的镜像数据修改共享数据,并通知其他进程更新镜像数据至修改后的共享数据,其他进程更新镜像数据的方法与多个进程读取共享数据的方法相同,即第一进程读取修改后的共享数据,并将修改后的共享数据保存为镜像数据,第二进程获取修改后的共享数据对应的镜像数据,进而第二进程获取修改后的共享数据。通过这种方法,在共享数据修改之后,多个需要读取共享数据的进程将原来读取的镜像数据更新为修改后的共享数据,不仅提高了读取共享数据的效率,还能通过共享进程维护多个进程读取到的共享数据的统一性,使得共享数据的读取和更新更加方便和智能。
进一步地,在共享进程基于修改后的镜像数据对共享数据进行修改之后,多进程共享数据处理方法包括:共享进程将修改后的共享数据保存在共享进程所运行的设备的内存中,或者,共享进程将修改后的共享数据上传至服务器。
共享进程将修改后的共享数据保存在共享进程所运行设备的内存中可以供其他进程直接读取存储在该运行设备内存中保存的共享数据,将修改后的共享数据上传至服务器可以节约共享进程的内存空间。
具体地,工作流程描述如下:
启动共享进程。该共享进程启动后,创建消息窗口。该窗口用来接收其他进程发送的进程间通信消息。
启动第一进程。
启动第一进程后,第一进程向共享进程发送第一进程启动消息,共享进程将共享数据通过进程间通信消息发送给新启动的第一进程,并对第一进程进行注册。
第一进程接收共享数据,保存为镜像数据。
第二进程需要读取共享数据时,读取第一进程保存的镜像数据。
第一进程修改共享数据时,修改第一进程保存的镜像数据,再将修改后的镜像数据通过进程间通信消息发送给数据共享进程。
共享进程收到消息后,基于修改后的镜像数据对应的修改共享数据,将修改后的共享数据发送给其他的进程(即使用共享数据的进程,如第二进程)。同时,第二进程负责将修改后的共享数据保存到共享进程所运行设备的内存中或者上传到服务器。
综上所述,本发明的优点如下:
多个进程中的每个进程都有一份共享数据镜像,多个进程可以同时读取共享数据共享数据的写操作由独立进程在同一个线程内完成,不需要加锁,提高了进程读取共享数据的效率。
共享进程监控共享数据,当共享数据更新后,实时向其他读取共享数据的进程发送消息。
共享数据的存储由共享进程完成,可以存储到本地文件也可以存储到服务器,方便随时调用。
多个进程中的每个进程都保存一份数据镜像,多个进程可以同时读写其本身保存的镜像数据,多个进程的读写互不影响。
图5是根据本发明实施例的多进程共享数据处理装置的数据处理流程图。
如图所示,共享进程启动进程之后,加载共享进程。
普通进程即上述多个进程中的第一进程或者第二进程。普通进程启动之后,向共享进程发送启动消息,共享进程接收到普通进程的启动消息后,对该普通进程进行注册,注册后将共享数据发送给普通进程,普通进程将接收到的共享数据保存为镜像数据,供其他普通进程读取共享数据。
如果普通进程需要修改共享数据,则修改镜像数据并保存为新的镜像数据,将更新后的镜像数据发送给共享进程,共享进程接收到更改后的镜像数据之后,将原来的共享数据更改为接收到的修改后的镜像数据,并将更改了共享数据的消息发送给已经进行注册过的普通进程。
本发明实施例提供了一种多进程共享数据处理装置。
本发明实施例的多进程共享数据处理装置可以用于执行本发明实施例所提供的多进程共享数据处理方法,本发明实施例的多进程共享数据处理方法也可以通过本发明实施例所提供的多进程共享数据处理装置来执行。
图6是根据本发明第一实施例的多进程共享数据处理装置的示意图。如图所示,该数据处理装置包括第一启动单元11、第一读取单元21、保存单元31、第二启动单元41和第二读取单元51。
本发明实施例提供的多进程共享数据处理装置中,多进程共享数据处理装置通过多个进程读取共享数据,多个进程包括第一进程和第二进程。
第一启动单元11用于启动第一进程。
第一读取单元21用于通过第一进程读取共享数据。
保存单元31用于在第一进程在读取共享数据之后,将共享数据保存为镜像数据。
第二启动单元41用于启动第二进程。
第二读取单元51用于第二进程通过读取镜像数据读取共享数据。
在第一启动单元11启动第一进程之后,第一读取单元21通过第一进程读取共享数据,在第一读取单元21读取共享数据之后,保存单元31将共享数据保存为镜像数据。如果第二进程需要读取共享数据,则第二启动单元41启动第二进程之后,第二读取单元51使第二进程读取第一进程保存的镜像数据,第二进程通过读取镜像数据读取共享数据。
镜像数据与共享数据相同,第一进程在读取共享数据之后,将共享数据保存在第一进程的数据区域,该数据区域可以是一个虚拟内存或者其他可以用来保存数据的区域。
第二进程读取第一进程保存的镜像数据,而镜像数据通过保存共享数据得到,从而使得第二进程读取到的镜像数据与第一进程读取到的共享数据相同,即第二进程读取得到共享数据。
通过保存单元31保存镜像数据第二读取单元51通过读取第一进程保存的镜像数据获得共享数据的方法,避免了第一进程和第二进程读写同一块物理内存,并且,在第一进程和第二进程读写共享数据的过程中,不需要在访问共享数据之前加线程锁,避免了线程锁导致的进程读取共享数据的效率较低的问题,从而提高了多个进程读取共享数据的效率。
图7是根据本发明第二实施例的多进程共享数据处理装置的示意图。如图所示,该多进程共享数据处理装置包括第一启动单元11、第一读取单元21、保存单元31、第二启动单元41和第二读取单元51,还包括:第三启动单元61、接收单元71、发送单元81和注册单元91。
第一启动单元11用于启动第一进程。
第一读取单元21用于通过第一进程读取共享数据。
保存单元31用于在第一进程在读取共享数据之后,将共享数据保存为镜像数据。
第二启动单元41用于启动第二进程。
第二读取单元51用于第二进程通过读取镜像数据读取共享数据。
在第一启动单元11启动第一进程之后,第一读取单元21通过第一进程读取共享数据,在第一读取单元21读取共享数据之后,保存单元31将共享数据保存为镜像数据。如果第二进程需要读取共享数据,则第二启动单元41启动第二进程之后,第二读取单元51使第二进程读取第一进程保存的镜像数据,第二进程通过读取镜像数据读取共享数据。
第三启动单元61用于在第一进程读取共享数据之前,启动共享进程。共享进程中存储了共享数据。
接收单元71用于通过共享进程接收第一进程的启动消息。第一进程的启动消息包含但不限于向共享进程请求共享数据的消息。
发送单元81用于在共享进程在接收到第一进程的启动消息之后,将共享数据发送至第一进程。第一进程准备接收第一进程发送的共享数据。
注册单元91用于通过共享进程对第一进程进行注册。
注册单元91通过共享进程对第一进程注册之后,确定第一进程可以从共享进程中获取共享数据,并且,在共享数据发生改变时,共享进程根据注册信息,将共享数据发生更改的信息发送给第一进程,或者将更改后的共享数据发送给第一进程。另外,在第一进程修改共享数据时,可以将修改了共享数据的消息发送给共享进程,共享进程根据注册信息保存修改后的共享数据。
上述多进程共享数据处理流程如图3所示,第一进程10将向共享进程30发送启动消息,共享进程30接收第一进程10的启动消息,并将共享数据发送至第一进程10,共享进程30对第一进程10进程注册。第二进程20从第一进程10中获取镜像数据,从而获得共享数据。
需要说明的是,在共享进程对第一进程进行注册之后,如果第二进程通过第一进程读取共享数据,则共享进程接收第二进程读取注册请求,对第二进程进行注册。任何一个读取了共享数据的进程,共享进程对这些读取了共享数据的进程注册,使得所有读取共享数据的进程都能与共享进程进行通信。
对读取共享数据的进程进行注册,使得在共享进程中的共享数据发生更新时,将更新后的共享数据发送给已经注册的进程,或者在已经注册的进程中的镜像数据发生更新时,将更新后的共享数据发送给共享进程。通过这种方法,实现了智能更新共享数据的方法,无论是共享进程中的共享数据发生改变还是其他获取共享数据的进程中的镜像数据发生改变,都能即时将所有共享数据更改为更新后的共享数据。
图8是根据本发明第三实施例的多进程共享数据处理装置的示意图。该多进程共享数据处理装置包括第一启动单元11、第一读取单元21、保存单元31、第二启动单元41和第二读取单元51,还包括:判断单元12、修改单元22、发送单元32和接收单元42。
第一启动单元11用于启动第一进程。
第一读取单元21用于通过第一进程读取共享数据。
保存单元31用于在第一进程在读取共享数据之后,将共享数据保存为镜像数据。
第二启动单元41用于启动第二进程。
第二读取单元51用于第二进程通过读取镜像数据读取共享数据。
在第一启动单元11启动第一进程之后,第一读取单元21通过第一进程读取共享数据,在第一读取单元21读取共享数据之后,保存单元31将共享数据保存为镜像数据。如果第二进程需要读取共享数据,则第二启动单元41启动第二进程之后,第二读取单元51使第二进程读取第一进程保存的镜像数据,第二进程通过读取镜像数据读取共享数据。
判断单元12用于在第一进程在将共享数据保存为镜像数据之后,通过第一进程判断是否需要对共享数据进行修改。
修改单元22用于在第一进程在确定需要对共享数据进行修改后,修改共享数据对应的镜像数据。
发送单元32用于通过第一进程将修改后的镜像数据发送至共享进程。
接收单元42用于通过第二进程接收共享进程发送的修改后的共享数据,其中,共享数据在接收到修改后的镜像数据之后,对共享数据进行修改,并将修改后的共享数据发送至第二进程。
第一进程根据共享数据的内容判断是否需要对共享数据进行修改,如果第一进程确定需要对共享数据进行修改,第一进程修改共享数据对应的镜像数据。
第一进程对镜像数据进行修改之后,将修改后的镜像数据发送至共享进程,由于镜像数据与共享数据相同,因此,修改镜像数据相当于修改共享数据。共享进程接收修改后的镜像数据后,按照修改后的镜像数据修改共享数据,将共享数据修改为修改后的镜像数据。
在共享进程修改共享数据为修改后的镜像数据之后,通知第二进程共享数据已经发生更改,第二进程可以通过第一进程重新读取修改后的共享数据。
需要说明的是,上述第二进程是多个进程中的任一进程,并且,由于共享进程对第二进程进行过注册,因此,第二进程仅作为读取共享数据的注册过的进程中的任意一个进程。
应该理解的是,在共享进程中的共享数据修改之后,可以对所有已经注册过的进程发送共享数据已经修改的消息,注册过的所有进程根据共享数据已经修改的消息更新注册过的所有进程读取的共享数据。
在多个进程中的任意一个进程更新共享数据时,在将更新后的镜像数据发送给共享进程之后,共享进程可以通知所有注册了该共享数据的进程对读取的共享数据进行修改,使得所有进程获得的共享数据一致。由于可以通过多个进程的镜像数据更新多个进程读取的共享数据,从而提高了多个进程获取共享数据的效率。
进一步地,为了更新已经读取的共享数据,该多进程共享数据处理装置还包括:
创建单元用于在第一进程读取共享数据之前,启动共享进程,在启动共享进程之后,通过共享进程创建消息窗口,其中,消息窗口用于接收第一进程和第二进程发送的进程间通信消息。
共享进程创建的消息窗口能够接收多个进程发送的进程间通信消息,进程间通信消息包括但不限于进程间的共享数据通信。进程间通信消息包括命名管道、消息、信号量、共享内存和网络套接字(scoket)等。
命名管道是一种简单的进程间通信机制,命名管道可以在同一台计算机的不同进程之间或者在跨越一个网络的不同计算机的不同进程之间,支持可靠的,单向或者双向的数据通信。由于命名管道利用重定向器,通过一个网络,在多个进程间建立通信,并不需要关心网络协议的细节,并且,命名管道具有较高的安全性。
信号量是在多线程环境下使用的一种装置,可以用来保证两个或者多个关键代码段不被开发并调用。在进入一个关键代码段之前,线程需要获取一个信号量,在该关键代码段完成之后,该线程释放信号量。其他需要进入该关键代码段的线程必须等待直到第一个线程释放信号量。
共享内存是指在多处理器的计算机系统中,可以被不同中央处理器访问的大容量内存。由于多个中央处理器需要快速访问存储器,这样就要对存储器进行缓存。任何一个缓存的数据被更新后,由于其他处理器也可能要存取数据,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是一种多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,多个程序间也可以通过共享内存来传递信息。
共享进程创建消息窗口之后,可以接收多个进程中的第一进程和第二进程发送的修改后的镜像数据的信息。
接收单元用于在第一进程对共享数据的镜像数据进行修改之后,共享进程接收第一进程通过进程间通信消息发送的修改后的镜像数据。
第一进程对共享数据对应的镜像数据进行修改之后,通过进程间通信消息将修改后的镜像数据发送至共享进程。
共享进程接收到修改后的镜像数据之后,按照修改后的镜像数据进行修改,目的是使得所有读取共享进程中的共享数据的进程能够读取到相同的共享数据,从而保证多个进程读取共享数据的一致性。
修改单元用于使共享进程基于修改后的镜像数据对共享数据进行修改。以及
共享进程基于修改后的镜像数据对共享数据的修改,可以首先比较修改后的镜像数据与共享数据的不同,将与修改后的镜像数据不同的共享数据修改为与修改后的镜像数据相同,也可以直接用修改后的镜像数据替换共享数据。
发送单元用于使共享进程通过进程间通信消息将修改的共享数据发送至第二进程。
共享进程将修改后的共享数据发送至第二进程,其中,第二进程是已经注册过共享进程的多个进程中的任意一个。
需要说明的是,上述过程仅用第一进程为例对本发明实施例的修改共享数据并将修改后的共享数据发送至其他进程,本发明实施例的第二进程也可以修改与共享数据对应的镜像数据,并将修改后的镜像数据发送给共享进程,再由共享进程将修改后的共享数据发送给其他已经注册的进程。
多个进程中的任意一个进程在对镜像数据进行修改之后,将修改后的镜像数据发送至共享进程,共享进程按照修改后的镜像数据修改共享数据,并通知其他进程更新镜像数据至修改后的共享数据,其他进程更新镜像数据的方法与多个进程读取共享数据的方法相同,即第一进程读取修改后的共享数据,并将修改后的共享数据保存为镜像数据,第二进程获取修改后的共享数据对应的镜像数据,进而第二进程获取修改后的共享数据。通过这种方法,在共享数据修改之后,多个需要读取共享数据的进程将原来读取的镜像数据更新为修改后的共享数据,不仅提高了读取共享数据的效率,还能通过共享进程维护多个进程读取到的共享数据的统一性,使得共享数据的读取和更新更加方便和智能。
进一步地,多进程共享数据处理装置还包括:保存单元,用于在共享进程基于修改后的镜像数据对共享数据进行修改之后,通过共享进程将修改后的共享数据保存在共享进程所运行的设备的内存中,或者,上传单元,用于在共享进程基于修改后的镜像数据对共享数据进行修改之后,通过共享进程将修改后的共享数据上传至服务器。
共享进程将修改后的共享数据保存在共享进程所运行设备的内存中可以供其他进程直接读取存储在该运行设备内存中保存的共享数据,将修改后的共享数据上传至服务器可以节约共享进程的内存空间。
本发明实施例还提供了一种计算机存储介质。该计算机存储介质可存储有程序,该程序用于执行上述的多进程共享数据处理方法中的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种多进程共享数据处理方法,其特征在于,通过多个进程读取共享数据,所述多个进程包括第一进程和第二进程,所述多进程共享数据处理方法包括:
启动所述第一进程;
所述第一进程读取共享数据;
所述第一进程在读取所述共享数据之后,将所述共享数据保存为镜像数据;
启动所述第二进程;以及
所述第二进程通过读取所述镜像数据读取所述共享数据。
2.根据权利要求1所述的多进程共享数据处理方法,其特征在于,在所述第一进程读取所述共享数据之前,所述多进程共享数据处理方法包括:
启动共享进程;
所述共享进程接收所述第一进程的启动消息;
所述共享进程在接收到所述第一进程的启动消息之后,将所述共享数据发送至所述第一进程;以及
所述共享进程对所述第一进程进行注册。
3.根据权利要求1所述的多进程共享数据处理方法,其特征在于,所述第一进程在将所述共享数据保存为所述镜像数据之后,所述多进程共享数据处理方法包括:
所述第一进程判断是否需要对所述共享数据进行修改;
所述第一进程在确定需要对所述共享数据进行修改后,修改所述共享数据对应的所述镜像数据;
所述第一进程将修改后的镜像数据发送至共享进程;以及
所述第二进程接收所述共享进程发送的修改后的共享数据,其中,所述共享数据在接收到修改后的镜像数据之后,对所述共享数据进行修改,并将修改后的共享数据发送至所述第二进程。
4.根据权利要求1所述的多进程共享数据处理方法,其特征在于,在所述第一进程读取所述共享数据之前,启动共享进程,在启动所述共享进程之后,所述多进程共享数据处理方法包括:
所述共享进程创建消息窗口,其中,所述消息窗口用于接收所述第一进程和所述第二进程发送的进程间通信消息;
在所述第一进程对所述共享数据的镜像数据进行修改之后,所述共享进程接收所述第一进程通过所述进程间通信消息发送的修改后的镜像数据;
所述共享进程基于所述修改后的镜像数据对所述共享数据进行修改;以及
所述共享进程通过所述进程间通信消息将修改的共享数据发送至所述第二进程。
5.根据权利要求4所述的多进程共享数据处理方法,其特征在于,在所述共享进程基于所述修改后的镜像数据对所述共享数据进行修改之后,所述多进程共享数据处理方法包括:
所述共享进程将所述修改后的共享数据保存在所述共享进程所运行的设备的内存中,或者,
所述共享进程将所述修改后的共享数据上传至服务器。
6.一种多进程共享数据处理装置,其特征在于,所述多进程共享数据处理装置通过多个进程读取共享数据,所述多个进程包括第一进程和第二进程,所述多进程共享数据处理装置包括:
第一启动单元,用于启动所述第一进程;
第一读取单元,用于通过所述第一进程读取共享数据;
保存单元,用于在所述第一进程在读取所述共享数据之后,将所述共享数据保存为镜像数据;
第二启动单元,用于启动所述第二进程;以及
第二读取单元,用于所述第二进程通过读取所述镜像数据读取所述共享数据。
7.根据权利要求6所述的多进程共享数据处理装置,其特征在于,所述多进程共享数据处理装置还包括:
第三启动单元,用于在所述第一进程读取所述共享数据之前,启动共享进程;
接收单元,用于通过所述共享进程接收所述第一进程的启动消息;
发送单元,用于在所述共享进程在接收到所述第一进程的启动消息之后,将所述共享数据发送至所述第一进程;以及
注册单元,用于通过所述共享进程对所述第一进程进行注册。
8.根据权利要求6所述的多进程共享数据处理装置,其特征在于,所述多进程共享数据处理装置还包括:
判断单元,用于在所述第一进程在将所述共享数据保存为所述镜像数据之后,通过所述第一进程判断是否需要对所述共享数据进行修改;
修改单元,用于在所述第一进程在确定需要对所述共享数据进行修改后,修改所述共享数据对应的所述镜像数据;
发送单元,用于通过所述第一进程将修改后的镜像数据发送至共享进程;
接收单元,用于通过所述第二进程接收所述共享进程发送的修改后的共享数据,其中,所述共享数据在接收到修改后的镜像数据之后,对所述共享数据进行修改,并将修改后的共享数据发送至所述第二进程。
9.根据权利要求6所述的多进程共享数据处理装置,其特征在于,所述多进程共享数据处理装置还包括:
创建单元,用于在所述第一进程读取所述共享数据之前,启动共享进程,在启动所述共享进程之后,通过所述共享进程创建消息窗口,其中,所述消息窗口用于接收所述第一进程和所述第二进程发送的进程间通信消息;
接收单元,用于在所述第一进程对所述共享数据的镜像数据进行修改之后,所述共享进程接收所述第一进程通过所述进程间通信消息发送的修改后的镜像数据;
修改单元,用于使所述共享进程基于所述修改后的镜像数据对所述共享数据进行修改;以及
发送单元,用于使所述共享进程通过所述进程间通信消息将修改的共享数据发送至所述第二进程。
10.根据权利要求9所述的多进程共享数据处理装置,其特征在于,所述多进程共享数据处理装置还包括:
保存单元,用于在所述共享进程基于所述修改后的镜像数据对所述共享数据进行修改之后,通过所述共享进程将所述修改后的共享数据保存在所述共享进程所运行的设备的内存中,或者,
上传单元,用于在所述共享进程基于所述修改后的镜像数据对所述共享数据进行修改之后,通过所述共享进程将所述修改后的共享数据上传至服务器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310695301.6A CN104714792B (zh) | 2013-12-17 | 2013-12-17 | 多进程共享数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310695301.6A CN104714792B (zh) | 2013-12-17 | 2013-12-17 | 多进程共享数据处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104714792A true CN104714792A (zh) | 2015-06-17 |
CN104714792B CN104714792B (zh) | 2019-02-26 |
Family
ID=53414171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310695301.6A Active CN104714792B (zh) | 2013-12-17 | 2013-12-17 | 多进程共享数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104714792B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106230839A (zh) * | 2016-08-03 | 2016-12-14 | 青岛海信宽带多媒体技术有限公司 | 实时流式传输的接收控制方法和装置 |
CN107426192A (zh) * | 2017-06-29 | 2017-12-01 | 环球智达科技(北京)有限公司 | 用于多进程的数据同步方法 |
CN107526972A (zh) * | 2016-06-21 | 2017-12-29 | 福建省天奕网络科技有限公司 | 进程间大数据量参数隐藏传递的方法及其系统 |
CN110069346A (zh) * | 2019-04-26 | 2019-07-30 | 杭州迪普科技股份有限公司 | 多进程间资源共享方法、装置、电子设备 |
CN115934210A (zh) * | 2023-03-14 | 2023-04-07 | 中航金网(北京)电子商务有限公司 | 多窗口共享对象存储实例的方法、装置及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070192524A1 (en) * | 2006-02-10 | 2007-08-16 | Chan Wilson Wai S | Anticipatory changes to resources managed by locks |
CN101295276A (zh) * | 2008-06-20 | 2008-10-29 | 中国科学院计算技术研究所 | 一种磁盘级数据备份系统和方法 |
CN101382953A (zh) * | 2008-09-19 | 2009-03-11 | 中兴通讯股份有限公司 | 在用户空间访问文件系统的接口系统与文件读、写方法 |
CN101853223A (zh) * | 2009-03-31 | 2010-10-06 | 日立软件工程株式会社 | 用户终端装置及其控制方法、以及程序 |
US8055864B2 (en) * | 2007-08-06 | 2011-11-08 | International Business Machines Corporation | Efficient hierarchical storage management of a file system with snapshots |
-
2013
- 2013-12-17 CN CN201310695301.6A patent/CN104714792B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070192524A1 (en) * | 2006-02-10 | 2007-08-16 | Chan Wilson Wai S | Anticipatory changes to resources managed by locks |
US8055864B2 (en) * | 2007-08-06 | 2011-11-08 | International Business Machines Corporation | Efficient hierarchical storage management of a file system with snapshots |
CN101295276A (zh) * | 2008-06-20 | 2008-10-29 | 中国科学院计算技术研究所 | 一种磁盘级数据备份系统和方法 |
CN101382953A (zh) * | 2008-09-19 | 2009-03-11 | 中兴通讯股份有限公司 | 在用户空间访问文件系统的接口系统与文件读、写方法 |
CN101853223A (zh) * | 2009-03-31 | 2010-10-06 | 日立软件工程株式会社 | 用户终端装置及其控制方法、以及程序 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107526972A (zh) * | 2016-06-21 | 2017-12-29 | 福建省天奕网络科技有限公司 | 进程间大数据量参数隐藏传递的方法及其系统 |
CN106230839A (zh) * | 2016-08-03 | 2016-12-14 | 青岛海信宽带多媒体技术有限公司 | 实时流式传输的接收控制方法和装置 |
CN106230839B (zh) * | 2016-08-03 | 2020-02-07 | 青岛海信宽带多媒体技术有限公司 | 实时流式传输的接收控制方法和装置 |
CN107426192A (zh) * | 2017-06-29 | 2017-12-01 | 环球智达科技(北京)有限公司 | 用于多进程的数据同步方法 |
CN110069346A (zh) * | 2019-04-26 | 2019-07-30 | 杭州迪普科技股份有限公司 | 多进程间资源共享方法、装置、电子设备 |
CN110069346B (zh) * | 2019-04-26 | 2021-07-23 | 杭州迪普科技股份有限公司 | 多进程间资源共享方法、装置、电子设备 |
CN115934210A (zh) * | 2023-03-14 | 2023-04-07 | 中航金网(北京)电子商务有限公司 | 多窗口共享对象存储实例的方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104714792B (zh) | 2019-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190220418A1 (en) | Memory Management Method and Apparatus | |
US10191759B2 (en) | Apparatus and method for scheduling graphics processing unit workloads from virtual machines | |
US9229878B2 (en) | Memory page offloading in multi-node computer systems | |
US10877793B2 (en) | Extending the base address register by modifying the number of read-only bits associated with a device to be presented to a guest operating system | |
US10922153B2 (en) | Communication method and device for virtual base stations | |
US11526440B2 (en) | Providing multiple memory modes for a processor including internal memory | |
US20180349193A1 (en) | Streaming program execution method of intelligent terminal | |
US8893272B2 (en) | Method and device for recombining runtime instruction | |
CN102667714B (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
CN104714792A (zh) | 多进程共享数据处理方法和装置 | |
US9959134B2 (en) | Request processing using VM functions | |
US11940915B2 (en) | Cache allocation method and device, storage medium, and electronic device | |
CN114580344A (zh) | 测试激励生成方法、验证方法、验证系统及相关设备 | |
CN115421787A (zh) | 指令执行方法、装置、设备、系统、程序产品及介质 | |
US9766918B2 (en) | Virtual system device identification using GPU to host bridge mapping | |
CN105677481A (zh) | 一种数据处理方法、系统及电子设备 | |
WO2020177567A1 (zh) | 一种迁移数据的方法、装置及系统 | |
US11436141B2 (en) | Free memory page hinting by virtual machines | |
US20230273801A1 (en) | Method for configuring compute mode, apparatus, and computing device | |
WO2017202128A1 (zh) | 非linux系统软件boot参数传递方法及系统 | |
US9405470B2 (en) | Data processing system and data processing method | |
CN113791873B (zh) | 一种虚拟机创建方法、计算设备及存储介质 | |
Pinto et al. | A zero-copy shared memory framework for host-guest data sharing in KVM | |
CN112540857B (zh) | 处理工作量证明计算任务的方法、装置和系统 | |
CN115904634B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |