CN103605577B - 跨进程的资源共享方法和设备 - Google Patents
跨进程的资源共享方法和设备 Download PDFInfo
- Publication number
- CN103605577B CN103605577B CN201310648237.6A CN201310648237A CN103605577B CN 103605577 B CN103605577 B CN 103605577B CN 201310648237 A CN201310648237 A CN 201310648237A CN 103605577 B CN103605577 B CN 103605577B
- Authority
- CN
- China
- Prior art keywords
- resource file
- area
- communication area
- mapping address
- target resource
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施方式提供了一种跨进程的资源共享方法和设备。所述方法包括:与同一个程序的多个进程实现进程间通信;响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;为所述目标资源文件分配一块共享内存区域作为资源文件存储区,将所述目标资源文件从物理磁盘载入到所述资源文件存储区中;将所述资源文件存储区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。当同一个程序的多个进程对资源文件的需求相同时,本发明的方法可以节约IO操作、CPU时间以及内存空间。此外,本发明的另一方面提供了一种跨进程的资源共享的设备,例如,客户端上安装的软件。
Description
技术领域
本发明的实施方式涉及数据存储领域,更具体地,本发明的实施方式涉及跨进程的资源共享方法和设备。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本申请的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。
在一台电脑上,往往会同时运行一个程序的多个进程,例如,游戏玩家为了多个游戏账号下的不同角色之间的交互,或者,为了同时玩多个不同的角色,就会运行一个游戏程序的多个进程。
在现有技术中,每个进程都拥有自己专属的一个内存空间,当某个进程需要资源文件时,该进程会调用一个资源管理模块,该资源管理模块将资源文件从物理磁盘载入到该进程专属的内存空间。
发明内容
但是,本发明人在研究过程中发现,在现有技术中,一个程序的多个进程对资源文件的需求通常是相同,即,一个程序的多个进程通常需要的资源文件是相同的。例如,当一个程序的多个进程都需要资源文件A时,对于每一个进程而言,都会调用一次资源管理模块,并由资源管理模块将资源文件A从物理磁盘载入到每一个进程各自的内存空间中。也就是说,资源管理模块会重复多次地对资源文件A执行载入操作。其中,资源管理模块在每次载入过程中都要执行如下操作:从物理磁盘读取经过编码处理的资源文件,对读取的资源文件进行解码,将解码后的资源文件写入到每个进程各自的内存空间。
因此依照现有技术,在资源管理模块从物理磁盘读取经过编码处理的资源文件的过程中,会消耗IO操作;在资源管理模块对读取的资源文件进行解码的过程中,也会消耗CPU时间;在资源管理模块将解码后的资源文件写入到每个进程各自的内存空间的过程中,还会消耗内存空间。如果资源管理模块重复多次地对相同的资源文件执行读取、解码和存储操作时,必然会消耗大量的IO操作、CPU时间和内存空间。特别是在一个程序同时运行大量进程的情况下,而对IO操作、CPU时间以及内存空间的损耗问题就变得更加严重。
为此,非常需要一种跨进程的集中的资源管理共享方法和设备,以解决现有技术中当同一个程序的多个进程对资源文件的需求相同时,会消耗大量的IO操作、CPU时间以及内存这一技术问题。
在本上下文中,本发明的实施方式期望提供一种实现跨进程的资源共享方法和设备。
在本发明实施方式的第一方面中,提供了一种实现跨进程的资源共享方法,包括:与同一个程序的多个进程实现进程间通信;响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;为所述目标资源文件分配一块共享内存区域作为资源文件存储区,将所述目标资源文件从物理磁盘载入到所述资源文件存储区中;将所述资源文件存储区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。
在本发明实施方式的第二方面中,提供了一种实现跨进程的资源共享设备,包括:进程间通信单元,用于与同一个程序的多个进程实现进程间通信;资源文件确定单元,用于响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;资源文件载入单元,用于为所述目标资源文件分配一块共享内存区域作为资源文件存储区,将所述目标资源文件从物理磁盘载入到所述资源文件存储区中;资源文件地址返回单元,用于将所述资源文件存储区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。
在本发明实施方式中,由于为目标资源文件分配了一块共享内存区域,而共享内存区域允许被同一个程序的多个进程访问,因此,只需执行一次将目标资源文件载入到共享内存区域的操作,而无需重复执行将目标资源文件分别载入到多个进程各自的内存空间的操作。从而,当同一个程序的多个进程对资源文件的需求相同时,可以节约IO操作、CPU时间以及内存空间。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了本发明的实施方式的一个示例性应用场景;
图2示意性地示出了根据本发明的一个实施方式的跨进程的资源共享的方法的流程图;
图3示意性地示出了根据本发明的一个实施方式的基于共享内存实现进程间通信的方法的流程图;
图4示意性地示出了根据本发明的另一个实施方式的跨进程的资源共享的方法的流程图;
图5示意性地示出了根据本发明一个实施方式的跨进程的资源共享设备的结构框架图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种实现跨进程的资源共享的方法和设备。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
本发明人发现,同一个程序的多个进程所需的资源文件通常是相同的,对于每一个进程而言,其会各自调用一次资源管理模块,以便由资源管理模块将资源文件从物理磁盘载入到每一个进程各自的内存空间中。也就是说,资源管理模块会重复多次地对相同的资源文件执行载入操作,并且,每次载入过程都要执行如下操作:从物理磁盘读取经过编码处理的资源文件,对读取的资源文件进行解码,将解码后的资源文件写入到每个进程各自的内存空间。由于从物理磁盘读取经过编码处理的资源文件的过程会消耗IO操作,对读取的资源文件进行解码的过程中会消耗CPU时间,将解码后的资源文件写入到每一个进程各自的内存空间的过程会消耗内存空间,因此,当资源管理模块在多个进程的调用下,重复多次地对相同的资源文件执行载入操作时,必然会消耗大量的IO操作、CPU时间以及内存空间。
如果针对同一个程序的多个进程所需的相同的资源文件,只进行一次载入操作,就可以节约因重复多次载入操作而消耗的IO操作、CPU时间以及内存空间。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
首先参考图1,图1示意性地示出了本发明的实施方式的一个示例性应用场景。其中,在客户端(例如,台式机)10上,运行了同一个程序的多个需求进程11(附图中的一个仅为示例)和一个中心进程12。中心进程12响应于需求进程11对资源文件的获取请求,先在客户端10上为资源文件分配一块共享内存区域13,然后将资源文件从物理磁盘载入到共享内存区域13中,最后将共享内存区域13的映射地址返回给需求进程11;需求进程11根据共享内存区域13的映射地址从共享内存区域13中读取资源文件。本领域技术人员可以理解,图1所示的示意图仅是本发明的实施方式可以在其中得以实现的一个示例。本发明实施方式的适用范围不受到该框架任何方面的限制。
示例性方法
下面结合图1的应用场景,参考图2来描述根据本发明示例性实施方式的、用于实现跨进程的资源共享的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
请参阅图2,其示意性地示出了根据本发明的一个实施方式的跨进程的资源共享的方法的流程图,方法具体例如可以包括:
步骤201:与同一个程序的多个进程实现进程间通信。
目前,实现进程间通信的方式有很多,例如,可以通过系统窗口消息实现进程间通信,或者,也可以通过网络协议时间进程间通信。
除此之外,根据本发明的第一个优选方式,还可以基于共享内存实现进程间通信。
图3示意性地示出了根据本发明的一个实施方式的基于共享内存实现进程间通信的方法的流程图,方法具体例如可以包括:
步骤301:为所述多个进程创建一块内存共享区域作为初始通信区,并为所述初始通信区创建一个事件内核对象作为第一事件内核对象。
中心进程创建一块内存共享区域作为初始通信区,同一个程序的多个需求进程共用该初始通信区。并且,该初始通信区具有一个约定名字。
在创建初始通信区的过程中,中心进程映射该初始通信区的共享内存,并得到初始通信区的映射地址。通过初始通信区的映射地址,中心进程既可以从初始通信区中读取数据,也可以向初始通信区写入数据。
另外,第一事件内核对象也具有一个约定名字。
步骤302:响应于所述第一事件内核对象的通知消息,从所述初始通信区中读取所述多个进程的身份标识,所述第一事件内核对象的通知消息是所述多个进程中当前新加入的进程将自己身份标识写入到所述初始通信区中时触发的。
下面将以需求进程1为当前新加入的进程为例,说明以下各步骤的执行过程。
需求进程1通过初始通信区的约定名字映射初始通信区的共享内存,并得到初始通信区的映射地址。通过初始通信区的映射地址,需求进程1既可以从初始通信区中读取数据,也可以向初始通信区写入数据。
其中,需求进程1将自身的身份标识写入到初始通信区中,写入完毕后触发第一事件内核对象的通知消息,中心进程在接收到第一事件内核对象的通知消息后,从初始通信区中读取需求进程1的身份标识。
步骤303:根据读取的所述多个进程中当前新加入的进程的身份标识为所述多个进程中当前新加入的进程分别分配一块共享内存区域作为进程通信区,并为所述进程通信区创建一个事件内核对象作为第二事件内核对象。
当中心进程从初始通信区中读取出需求进程1的身份标识后,为需求进程1分配一块共享内存区域作为进程通信区1,并为需求进程1分配一个唯一的索引号。
在为需求进程1分配进程通信区1的过程中,中心进程映射该进程通信区1的共享内存,并得到进程通信区1的映射地址。通过进程通信区1的映射地址,中心进程既可以从进程通信区1中读取数据,也可以向进程通信区1写入数据。
另外,第二事件内核对象的名字可以为第一事件内核对象的约定名字+需求进程1的索引号。
步骤304:将所述进程通信区的映射地址写入到所述初始通信区,并重置位于所述初始通信区的第一标志位,被重置的所述第一标志位用于指示所述多个进程中当前新加入的进程已经可以从所述初始通信区中读取所述进程通信区的映射地址,以便基于所述进程通信区与所述多个进程中当前新加入的进程时间进程间通信。
中心进程将进程通信区1的映射地址写入到初始通信区中,并且,重置位于初始通信区的一个标志位。需求进程1一旦发现初始通信区中的该标志位被重置,就从初始通信区读取进程通信区1的映射地址。需求进程1通过该进程通信区1的映射地址,既可以从进程通信区1中读取数据,也可以向进程通信区1写入数据。
除了进程通信区1的映射地址之外,中心进程还将需求进程1的索引号写入到初始通信区,以便需求进程1从初始通信区中读取该索引号。之后,中心进程与需求进程1之间通过进程通信区1实现进程间通信。
接着返回图2。
步骤202:响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件。
根据本发明的第一个优选方式,当基于共享内存实现进程间通信时,响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件具体为:响应于所述第二事件内核对象的通知消息,从所述进程通信区中读取目标资源文件的路径名,根据所述目标资源文件的路径名确定所述多个进程中当前请求获取资源文件的进程请求获取的目标资源文件,所述第二事件内核对象的通知消息是所述多个进程中当前请求获取资源文件的进程将所述目标资源文件的路径名写入到所述进程通信区中时触发的。
例如,当需要资源文件A时,需求进程1将资源文件A的路径名写入到进程通信区1中,然后触发第二事件内核对象的通知消息,当中心进程接收到第二事件内核对象的通知消息后,从进程通信区1中读取资源文件A的路径名。
步骤203:为所述目标资源文件分配一块共享内存区域作为资源文件存储区,将所述目标资源文件从物理磁盘载入到所述资源文件存储区中。
例如,中心进程为资源文件A分配一块共享内存区域作为资源文件A存储区,并根据资源文件A的路径名从物理磁盘中找到该资源文件A,然后将资源文件A载入到该资源文件A存储区中,并得到资源文件A在资源文件A存储区中的映射地址。
当然,在中心进程为资源文件A分配资源文件A存储区的过程中,中心进程映射资源文件A存储区的共享内存,得到资源文件A存储区的映射地址,通过该映射地址,中心进程可以向资源文件A存储区写入资源文件A。
步骤204:将所述资源文件存储区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。
例如,中心进程将资源文件A存储区的映射地址写入到进程通信区1中,并重置位于进程通信区1中的一个标志位,需求进程1一旦发现进程通信区1中的该标志位被重置,就从进程通信区1读取资源文件A存储区的映射地址。通过资源文件A存储区的映射地址,需求进程1就可以进一步从资源文件A存储区中读取资源文件A。
对于需求进程来说,除了资源文件之外,其运行还要依赖一些用于描述资源文件的辅助信息,如,资源文件的大小和资源文件是否被占用等信息。并且,在有些情况下,即使保存某些资源文件的资源文件存储区被释放,需求进程仍然需要这些资源文件的辅助信息,此时,辅助信息不能与资源文件一同被删除。
为了更加方便需求进程获取这些辅助信息,根据本发明的第二个优选方式,方法还包括:为所述目标资源文件分配一块共享内存区域作为资源文件描述区,所述资源文件描述区中至少包含所述资源文件存储区的映射地址。
则上述步骤204替换为:将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。
当然,除了所述目标资源文件在所述资源文件存储区中的映射地址之外,所述资源文件描述区还至少包含:目标资源文件的大小和锁定标识,所述锁定标识用于指示所述确定的资源文件是否被占用。
另外,在实际操作中,中心进程可以为目标资源文件分配一个一个资源文件描述区,而资源文件描述区中资源文件存储区的映射地址可以先置空,以及目标资源文件的大小和锁定标识等辅助信息先写入到资源文件描述区中,此时已可以将资源文件描述区的映射地址返回给需求进程,以便需求进程可以优先先根据资源文件描述的映射地址获得位于资源文件描述区中的辅助信息。同时中心进程可以继续分配资源文件存储区,将资源文件载入该区后,再将映射地址填入资源文件描述区中存储区映射地址段。需求进程会跟踪资源文件描述区中的存储区映射地址段,一旦发生改变,可以立即判定出资源文件是否已经被载入存储区。
根据本发明的第一个优选方式,当基于共享内存实现进程间通信时,将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程具体为:将所述资源文件描述区的映射地址写入所述多个进程中当前请求获取资源文件的进程的进程通信区,并重置位于所述初始通信区的第二标志位,被重置的所述第二标志位用于指示所述多个进程中当前请求获取资源文件的进程已经可以从自己的进程通信区中读取所述资源文件描述区的映射地址。
例如,中心进程为资源文件A分配资源文件A描述区,在资源文件A描述区中包含有资源文件A存储区的映射地址,以及资源文件A的大小和锁定标识等辅助信息。中心进程将资源文件A描述区的映射地址写入到需求进程1的进程通信区1中,并重置位于初始通信区的一个标志位,需求进程1一旦发现该标志位被重置,就从进程通信区1中读取资源文件A描述区的映射地址。
对于每一个已经存储到共享内存的资源文件,当有需求进程需要该资源文件时,为了避免重复载入并更够更快地向该需求进程反馈结果,根据本发明的第三个优选方式,还包括:建立所述目标资源文件的路径名与所述资源文件描述区的映射地址之间的对应关系,将建立的对应关系保存在预设列表中。
请参阅图4,其示意性地示出了根据本发明的另一个实施方式的跨进程的资源共享的方法的流程图,方法具体例如可以包括:
步骤401:与同一个程序的多个进程实现进程间通信;
步骤402:响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;
步骤403:查询在预设列表中是否存在所述目标资源文件的路径名,如果是,进入步骤404,否则,进入步骤406;
步骤404:直接从所述预设列表中读取与所述目标资源文件的路径名具有对应关系的所述资源文件描述区的映射地址;
步骤405:将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程,结束流程;
步骤406:为所述目标资源文件分配一块共享内存区域作为资源文件描述区以及分配一块共享内存区域作为资源文件存储区,并将所述目标资源文件从物理磁盘载入到所述资源文件存储区中,所述资源文件描述区中至少包含所述资源文件存储区的映射地址;
步骤407:将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程;
步骤408:建立所述目标资源文件的路径名与所述资源文件描述区的映射地址之间的对应关系,将建立的对应关系保存在预设列表中,结束流程。
为了避免资源文件占用过多的共享内存空间,根据本发明的第四个优选方式,还包括:定期检查所述资源文件存储区中的资源文件的占用状况,当所述资源文件存储区中的资源文件在预设时间段内始终空闲时,释放所述资源文件存储区。
在具体操作时,中心进程可以定期扫描预设列表中的各资源文件描述区的映射地址,根据映射地址定期读取位于各资源文件描述区中的锁定标记,当锁定标记在连续几次都指示资源文件未被占用时,说明该资源文件在预设时间段内始终空闲,中心进程根据位于资源文件描述区中的资源文件存储区的映射地址,对相应的资源文件存储区进行释放。
需要说明的是,在本发明的一个优选方式中,可以以固定大小(例如8M)为单位创建共享内存块。当一个共享内存块使用完后,再创建一个共享内存块,以此动态增加。并且,每个共享内存块的命名可以为基本约定名_块索引的方式。例如,基本约定命名为:ShareMemoryForResfile,则第一个被建立的共享内存块的名字则为ShareMemoryForResfile_1,第二个被建立的共享内存块的名字就是ShareMemoryForResfile_2,以此类推。
由于同一块共享内存区域在不同的进程中,可能会被映射到不同的地址区段。因此,在本发明的一个优选方式中,可以通过如下方式表达各共享内存区域的映射地址:先确定该共享内存区域在第几个共享内存块(即,所在共享内存块的索引号)和在该共享内存块内的相对地址偏移,然后将所在共享内存块的索引号和在该共享内存块内的相对地址偏移合并到一个32位的整形数据中,即,高8位记录共享内存块的索引号,低24位记录在该共享内存块内的相对地址偏移。
根据本发明,由于为目标资源文件分配了一块共享内存区域,而共享内存区域允许被同一个程序的多个进程访问,因此,只需执行一次将目标资源文件载入到共享内存区域的操作,而无需重复执行将目标资源文件分别载入到多个进程各自的内存空间的操作。从而,当同一个程序的多个进程对资源文件的需求相同时,可以节约IO操作、CPU时间以及内存空间。
示例性设备
在介绍了方法之后,接下来,参考图5,其示意性地示出了根据本发明一个实施方式的跨进程的资源共享设备的结构框架图,来描述用于实现跨进程的资源共享的设备。具体地,该设备例如可以包括:
进程间通信单元501,用于与同一个程序的多个进程实现进程间通信;
资源文件确定单元502,用于响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;
资源文件载入单元503,用于为所述目标资源文件分配一块共享内存区域作为资源文件存储区,将所述目标资源文件从物理磁盘载入到所述资源文件存储区中;
资源文件地址返回单元504,用于将所述资源文件存储区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。
根据本发明的一个实施方式,还包括:资源文件描述区分配单元,用于为所述目标资源文件分配一块共享内存区域作为资源文件描述区,所述资源文件描述区中至少包含所述资源文件存储区的映射地址;
则所述资源文件地址返回单元504具体用于,将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程。
根据本发明的一个实施方式,还包括:关系存储单元,用于建立所述目标资源文件与所述资源文件描述区的映射地址之间的对应关系,将建立的对应关系保存在预设列表中。
根据本发明的一个实施方式,还包括:关系查询单元,用于在所述资源文件载入单元为所述目标资源文件分配一块共享内存区域作为资源文件存储区,并将所述目标资源文件从物理磁盘载入到所述资源文件存储区中之前,查询在所述预设列表中是否存在所述目标资源文件路径名;
则所述资源文件载入单元503具体用于,当在所述预设列表中不存在所述目标资源文件的路径名时,为所述目标资源文件分配一块共享内存区域作为资源文件存储区,并将所述目标资源文件从物理磁盘载入到所述资源文件存储区中。
根据本发明的一个实施方式,还包括:预设列表读取单元,用于当在所述预设列表中存在所述目标资源文件的路径名时,直接从所述预设列表中读取与所述目标资源文件的路径名具有对应关系的所述资源文件描述区的映射地址。
根据本发明的一个实施方式,当在所述预设列表中存在所述目标资源文件的路径名时,直接从所述预设列表中读取与所述目标资源文件的路径名具有对应关系的所述资源文件描述区的映射地址。
根据本发明的一个实施方式,还包括:释放单元,用于定期检查所述资源文件存储区中的资源文件的占用状况,当所述资源文件存储区中的资源文件在预设时间段内始终空闲时,释放所述资源文件存储区。
根据本发明的一个实施方式,进程间通信单元501包括:
创建子单元,用于为所述多个进程创建一块共享内存区域作为初始通信区,并为所述初始通信区创建一个事件内核对象作为第一事件内核对象;
第一消息响应子单元,用于响应于所述第一事件内核对象的通知消息,从所述初始通信区中读取所述多个进程的身份标识,所述第一事件内核对象的通知消息是所述多个进程中当前新加入的进程将自己的身份标识写入到所述初始通信区中时触发的;
第一分配子单元,用于根据读取的所述多个进程中当前新加入的进程的身份标识为所述多个进程中当前新加入的进程分别分配一块共享内存区域作为进程通信区,并为所述进程通信区创建一个事件内核对象作为第二事件内核对象;
第一写入子单元,用于将所述进程通信区的映射地址写入到所述初始通信区,并重置位于所述初始通信区的第一标志位,被重置的所述第一标志位用于指示所述多个进程中当前新加入的进程已经可以从所述初始通信区中读取所述进程通信区的映射地址,以便基于所述进程通信区与所述多个进程中当前新加入的进程实现进程间通信。
根据本发明的一个实施方式,资源文件确定单元502具体用于,响应于所述第二事件内核对象的通知消息,从所述进程通信区中读取目标资源文件的路径名,根据所述目标资源文件的路径名确定所述多个进程中当前请求获取资源文件的进程请求获取的目标资源文件,所述第二事件内核对象的通知消息是所述多个进程中当前请求获取资源文件的进程将所述目标资源文件的路径名写入到所述进程通信区中时触发的。
根据本发明的一个实施方式,资源文件地址返回单元504具体用于,将所述资源文件描述区的映射地址写入所述多个进程中当前请求获取资源文件的进程的进程通信区,并重置位于所述初始通信区的第二标志位,被重置的所述第二标志位用于指示所述多个进程中当前请求获取资源文件的进程已经可以从自己的进程通信区中读取所述资源文件描述区的映射地址。
根据本发明,由于为目标资源文件分配了一块共享内存区域,而共享内存区域允许被同一个程序的多个进程访问,因此,只需执行一次将目标资源文件载入到共享内存区域的操作,而无需重复执行将目标资源文件分别载入到多个进程各自的内存空间的操作。从而,当同一个程序的多个进程对资源文件的需求相同时,可以节约IO操作、CPU时间以及内存空间。
应当注意,尽管在上文详细描述中提及了跨进程的资源共享设备的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (7)
1.一种跨进程的资源共享方法,包括:
与同一个程序的多个进程基于共享内存实现进程间通信;
响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;
查询在预设列表中是否存在所述目标资源文件的路径名;所述预设列表用于保存:目标资源文件的路径名和资源文件描述区的映射地址之间的对应关系;
如果是,则从所述预设列表中读取与所述目标资源文件的路径名具有对应关系的所述资源文件描述区的映射地址,并将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程;
如果否,则为所述目标资源文件分配一块共享内存区域作为资源文件存储区以及分配一块共享内存区域作为资源文件描述区,并将所述目标资源文件从物理磁盘载入到所述资源文件存储区中,所述资源文件描述区中至少包含所述资源文件存储区的映射地址;将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程;以及,建立所述目标资源文件的路径名与所述资源文件描述区的映射地址之间的对应关系,并将建立的对应关系保存在预设列表中。
2.根据权利要求1所述的方法,还包括:
定期检查所述资源文件存储区中的资源文件的占用状况,当所述资源文件存储区中的资源文件在预设时间段内始终空闲时,释放所述资源文件存储区。
3.根据权利要求1至2中任意一项所述的方法,其中,所述与同一个程序的多个进程实现进程间通信,包括:
为所述多个进程创建一块共享内存区域作为初始通信区,并为所述初始通信区创建一个事件内核对象作为第一事件内核对象;
响应于所述第一事件内核对象的通知消息,从所述初始通信区中读取所述多个进程的身份标识,所述第一事件内核对象的通知消息是所述多个进程中当前新加入的进程将自己的身份标识写入到所述初始通信区中时触发的;
根据读取的所述多个进程中当前新加入的进程的身份标识为所述多个进程中当前新加入的进程分别分配一块共享内存区域作为进程通信区,并为所述进程通信区创建一个事件内核对象作为第二事件内核对象;
将所述进程通信区的映射地址写入到所述初始通信区,并重置位于所述初始通信区的第一标志位,被重置的所述第一标志位用于指示所述多个进程中当前新加入的进程已经可以从所述初始通信区中读取所述进程通信区的映射地址,以便基于所述进程通信区与所述多个进程中当前新加入的进程实现进程间通信。
4.根据权利要求3所述的方法,其中,响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件具体为:
响应于所述第二事件内核对象的通知消息,从所述进程通信区中读取目标资源文件的路径名,根据所述目标资源文件的路径名确定所述多个进程中当前请求获取资源文件的进程请求获取的目标资源文件,所述第二事件内核对象的通知消息是所述多个进程中当前请求获取资源文件的进程将所述目标资源文件的路径名写入到所述进程通信区中时触发的。
5.根据权利要求3所述的方法,其中,将所述资源文件描述区的映射地址返回给所述多个进程中当前请求获取资源文件的进程具体为:
将所述资源文件描述区的映射地址写入所述多个进程中当前请求获取资源文件的进程的进程通信区,并重置位于所述初始通信区的第二标志位,被重置的所述第二标志位用于指示所述多个进程中当前请求获取资源文件的进程已经可以从自己的进程通信区中读取所述资源文件描述区的映射地址。
6.一种跨进程的资源共享设备,包括:
进程间通信单元,用于与同一个程序的多个进程基于共享内存实现进程间通信;
资源文件确定单元,用于响应于所述多个进程中当前请求获取资源文件的进程的获取请求,确定所述获取请求所针对的目标资源文件;
关系查询单元,用于查询在预设列表中是否存在所述目标资源文件路径名;所述预设列表用于保存:目标资源文件的路径名和资源文件描述区的映射地址之间的对应关系;
预设列表读取单元,用于当在所述预设列表中存在所述目标资源文件的路径名时,从所述预设列表中读取与所述目标资源文件的路径名具有对应关系的所述资源文件描述区的映射地址;
资源文件载入单元,用于当在所述预设列表中不存在所述目标资源文件的路径名时,为所述目标资源文件分配一块共享内存区域作为资源文件存储区,将所述目标资源文件从物理磁盘载入到所述资源文件存储区中;
资源文件描述区分配单元,用于为所述目标资源文件分配一块共享内存区域作为资源文件描述区,所述资源文件描述区中至少包含所述资源文件存储区的映射地址;
关系存储单元,用于建立所述目标资源文件与所述资源文件描述区的映射地址之间的对应关系,将建立的对应关系保存在预设列表中;
资源文件地址返回单元,用于将所述预设列表读取单元读取到的所述资源文件描述区的映射地址,或者,所述资源文件描述区分配单元分配的资源文件描述区的映射地址,返回给所述多个进程中当前请求获取资源文件的进程。
7.根据权利要求6所述的设备,其中,所述进程间通信单元包括:
创建子单元,用于为所述多个进程创建一块共享内存区域作为初始通信区,并为所述初始通信区创建一个事件内核对象作为第一事件内核对象;
第一消息响应子单元,用于响应于所述第一事件内核对象的通知消息,从所述初始通信区中读取所述多个进程的身份标识,所述第一事件内核对象的通知消息是所述多个进程中当前新加入的进程将自己的身份标识写入到所述初始通信区中时触发的;
第一分配子单元,用于根据读取的所述多个进程中当前新加入的进程的身份标识为所述多个进程中当前新加入的进程分别分配一块共享内存区域作为进程通信区,并为所述进程通信区创建一个事件内核对象作为第二事件内核对象;
第一写入子单元,用于将所述进程通信区的映射地址写入到所述初始通信区,并重置位于所述初始通信区的第一标志位,被重置的所述第一标志位用于指示所述多个进程中当前新加入的进程已经可以从所述初始通信区中读取所述进程通信区的映射地址,以便基于所述进程通信区与所述多个进程中当前新加入的进程实现进程间通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310648237.6A CN103605577B (zh) | 2013-12-04 | 2013-12-04 | 跨进程的资源共享方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310648237.6A CN103605577B (zh) | 2013-12-04 | 2013-12-04 | 跨进程的资源共享方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103605577A CN103605577A (zh) | 2014-02-26 |
CN103605577B true CN103605577B (zh) | 2017-06-30 |
Family
ID=50123806
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310648237.6A Active CN103605577B (zh) | 2013-12-04 | 2013-12-04 | 跨进程的资源共享方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103605577B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104980454B (zh) * | 2014-04-02 | 2019-08-06 | 腾讯科技(深圳)有限公司 | 一种资源数据共享方法、服务器及系统 |
CN104978278B (zh) * | 2014-04-14 | 2020-05-29 | 创新先进技术有限公司 | 数据处理方法和装置 |
CN105022750B (zh) * | 2014-04-28 | 2019-05-10 | 腾讯科技(北京)有限公司 | 资源文件加载方法和装置 |
CN107026884A (zh) * | 2016-02-02 | 2017-08-08 | 阿里巴巴集团控股有限公司 | 资源文件的获取方法、客户端、服务器和系统 |
CN107341048B (zh) * | 2017-06-23 | 2021-03-23 | 苏州浪潮智能科技有限公司 | 一种查询占用服务器特定资源的客户端的方法和装置 |
CN107229530A (zh) * | 2017-06-29 | 2017-10-03 | 上海联影医疗科技有限公司 | 进程间的通信方法、存储介质以及计算机设备 |
CN109582458A (zh) * | 2017-09-28 | 2019-04-05 | 北京国双科技有限公司 | 资源信息加载方法、装置、存储介质及处理器 |
CN108762954B (zh) * | 2018-05-29 | 2021-11-02 | 维沃移动通信有限公司 | 一种对象分享方法及移动终端 |
CN112823336A (zh) * | 2018-11-21 | 2021-05-18 | 深圳市欢太科技有限公司 | 数据处理方法、装置、电子设备以及存储介质 |
CN109756704A (zh) * | 2018-11-30 | 2019-05-14 | 安徽清新互联信息科技有限公司 | 一种嵌入式音视频监控系统的进程间通信方法及系统 |
CN111586170B (zh) * | 2020-05-07 | 2023-05-23 | 广州博冠信息科技有限公司 | 资源下载方法、装置、设备及计算机可读存储介质 |
CN112256457A (zh) * | 2020-11-06 | 2021-01-22 | 开普云信息科技股份有限公司 | 一种基于共享内存的数据载入加速方法、装置、电子设备及存储介质 |
CN113297114B (zh) * | 2021-05-21 | 2022-12-06 | 清创网御(合肥)科技有限公司 | 一种基于加密卡pcie独立io支持多进程、多线程的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101572710B (zh) * | 2009-06-03 | 2012-06-27 | 杭州华三通信技术有限公司 | 一种进程间通信方法和系统 |
CN102004675A (zh) * | 2010-11-11 | 2011-04-06 | 福建星网锐捷网络有限公司 | 跨进程数据传输方法、装置及网络设备 |
-
2013
- 2013-12-04 CN CN201310648237.6A patent/CN103605577B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN103605577A (zh) | 2014-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103605577B (zh) | 跨进程的资源共享方法和设备 | |
US11934888B2 (en) | Systems and method for managing memory resources used by smart contracts of a blockchain | |
CN110750436B (zh) | 分层测试方法、装置、计算机可读介质及电子设备 | |
WO2017107414A1 (zh) | 文件操作方法和装置 | |
US8997047B2 (en) | Dynamically updating code without requiring processes to restart | |
CN108319496A (zh) | 资源访问方法、业务服务器、分布式系统及存储介质 | |
CN103369038B (zh) | 平台即服务PaaS管理平台及方法 | |
US8666958B2 (en) | Approaches to reducing lock communications in a shared disk database | |
WO2011146540A2 (en) | Sharing and synchronization of objects | |
CN107229530A (zh) | 进程间的通信方法、存储介质以及计算机设备 | |
CN106503069A (zh) | 文件共享方法及装置 | |
CN106649654A (zh) | 一种数据更新的方法和装置 | |
US11983159B2 (en) | Systems and methods for management of a log-structure | |
US20150134861A1 (en) | Personal cloud storage chain service system and method | |
CN113535087A (zh) | 数据迁移过程中的数据处理方法、服务器及存储系统 | |
CN105677481A (zh) | 一种数据处理方法、系统及电子设备 | |
US10585879B2 (en) | Database identifier generation in transaction processing systems | |
US20060195586A1 (en) | Sessions and terminals configured for binding in an extensible manner | |
CN105512091A (zh) | 一种内存分配方法及装置 | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
US11855908B2 (en) | Resource allocation in cloud computing systems | |
US20140123250A1 (en) | Securitization of developer credentials | |
JP2007293639A (ja) | アクセス制御方法、アクセス制御方法を用いた機器及びシステム | |
CN113918530B (zh) | 分布式锁的实现方法、装置、电子设备及介质 | |
CN114185682B (zh) | 日志输出方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |