CN115934662A - 文件共享方法、装置、电子设备和存储介质 - Google Patents
文件共享方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN115934662A CN115934662A CN202110921370.9A CN202110921370A CN115934662A CN 115934662 A CN115934662 A CN 115934662A CN 202110921370 A CN202110921370 A CN 202110921370A CN 115934662 A CN115934662 A CN 115934662A
- Authority
- CN
- China
- Prior art keywords
- target
- node
- shared
- file
- information
- 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.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种文件共享方法、装置、电子设备和存储介质;本申请当检测到目标应用程序启动时,获取目标信息集合;基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系;响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。本方案可以减少资源消耗。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种文件共享方法、装置、电子设备和存储介质。
背景技术
应用程序是指为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。运行在操作系统上的应用程序可对应一个进程,进程是应用程序关于某个数据集合的一次运行活动;进程可以申请和拥有系统资源,如可以拥有自己独立的虚拟地址空间。
目前,当多个应用程序加载相同文件时,会占用大量的内存资源。
发明内容
本申请提供一种文件共享方法、装置、电子设备和存储介质,可以减少资源消耗。
本申请提供一种文件共享方法,包括:
当检测到目标应用程序启动时,获取目标信息集合,目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息;
基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的;
响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;
当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;
当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
本申请还提供一种文件共享装置,包括:
获取单元,用于当检测到目标应用程序启动时,获取目标信息集合,目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息和目标虚拟映射地址;
映射单元,用于基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息和目标虚拟映射地址确定的;
响应单元,用于响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
在一些实施例中,文件共享装置还用于:
获取多个应用程序在运行时访问的运行数据的信息,多个应用程序包括目标应用程序;
根据应用程序在运行时访问的运行数据的信息确定共享资源所对应信息的集合;
获取目标信息集合,包括:
获取目标应用程序的资源路径;
根据目标应用程序的资源路径和共享资源所对应信息的集合,确定目标信息集合。
在一些实施例中,应用程序的运行数据的信息包括运行数据之间的依赖关系、运行数据所属的文件集合,共享资源所对应信息的集合包括共享节点集合,文件共享装置具体用于:
将运行数据所属的文件集合转换为应用程序对应的节点;
基于运行数据之间的依赖关系和应用程序对应的节点确定共享节点集合。
在一些实施例中,文件共享装置具体用于:
根据运行数据之间的依赖关系确定应用程序对应的节点之间的依赖关系;
根据应用程序对应的节点之间的依赖关系对应用程序对应的节点进行排序,得到应用程序对应的节点集合;
基于应用程序对应的节点集合,确定共享节点集合。
在一些实施例中,文件共享装置具体用于:
将多个应用程序对应的节点集合中所有应用程序共有的节点作为基础共享节点;和/或,
将多个应用程序对应的节点集合中至少一个应用程序共有的节点作为局部共享节点;和/或,
将多个应用程序对应的节点集合中除基础共享节点和局部共享节之外的节点作为普通节点;
确定共享节点集合,共享节点集合包括基础共享节点、局部共享节点和普通节点中至少一项。
在一些实施例中,文件共享装置具体用于:
根据共享节点集合中共享节点之间的依赖关系,生成节点索引信息;
基于基础共享节点对应的运行数据生成基础共享节点对应的共享文件和共享文件的信息;和/或,
基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件和共享文件的信息;和/或,
根据节点索引信息和普通节点对应的运行数据,生成普通节点对应的共享文件和共享文件的信息;
基于基础共享节点对应的共享文件的信息和/或局部共享节点对应的共享文件的信息和/或普通节点对应的共享文件的信息,更新节点索引信息。
在一些实施例中,文件共享装置具体用于:
根据节点索引信息确定局部共享节点依赖的基础共享节点;
基于局部共享节点依赖的基础共享节点的共享文件和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件。
在一些实施例中,文件共享装置具体用于:
确定基础共享节点对应的虚拟映射地址;
根据基础共享节点对应的虚拟映射地址更新节点索引信息;
基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件,还包括:
从节点索引信息中获取基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址;
根据基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址,计算当前局部共享节点的虚拟映射地址;
基于当前局部共享节点的虚拟映射地址,更新节点索引信息。
在一些实施例中,文件共享装置具体用于:
从运行数据所属的文件集合中确定包含同名数据类型的文件集合;
将包含同名数据类型的文件集合作为一个节点。
在一些实施例中,目标信息集合包括目标共享文件中的数据类型集合,文件共享装置还用于:
根据目标共享文件中的数据类型集合更新预设的全局数据类型集合;
获取共享物理空间中目标共享文件中的目标数据,包括:
在全局数据类型集合中查找目标数据对应的数据类型;
根据目标数据对应的数据类型,从共享物理空间中获取目标数据。
在一些实施例中,文件共享装置还用于:
当内存映射失败时,在虚拟地址空间中确定新的虚拟映射地址,虚拟地址空间是目标应用程序运行时对应的虚拟地址空间;
基于新的虚拟映射空间,对目标共享文件进行内存重映射,新的虚拟映射空间与新的虚拟映射地址对应;
当内存重映射成功时,将目标信息集合中的目标虚拟映射地址更新为新的虚拟映射地址。
在一些实施例中,目标共享文件为目标共享节点对应的共享文件,文件共享装置还用于:
获取节点索引信息;
基于节点索引信息,确定目标共享节点依赖的节点;
对目标共享节点依赖的节点对应的共享文件进行内存映射。
本申请还提供一种电子设备,包括存储器和处理器,存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本申请所提供的任一种文件共享方法中的步骤。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请所提供的任一种文件共享方法中的步骤。
在本申请中,通过获取多个应用程序在运行时访问的运行数据的信息,来生成多个应用程序的共享文件以及确定相应虚拟映射空间;当目标应用程序启动时,则基于虚拟映射空间对共享文件进行映射,使得共享文件与虚拟映射空间对应;然后响应于目标应用程序的访问目标数据的访问请求,访问共享文件中的目标数据;若在目标应用程序加载共享文件之前,已经有应用程序加载过共享文件,则内存中存在虚拟映射空间对应的共享物理空间,就可以访问共享物理空间中共享文件中的数据了;若在目标应用程序加载共享文件之前,没有应用程序加载过共享文件到内存中,才需要将虚拟映射地址转换为共享物理空间,将共享文件加载到共享物理空间中。由此,多个应用程序可以共用同一个共享物理空间中的共享文件,减少了资源消耗。
附图说明
为了更清楚地说明本申请中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请提供的文件共享方法的流程示意图;
图1b是本申请提供的文件集合依赖关系的示意图;
图1c是本申请提供的节点索引表的示意图;
图2a是本申请提供的大数据平台对应的jar包的示意图;
图2b是本申请提供的多个应用程序对应的类路径的示意图;
图2c是本申请提供的另一种文件共享方法的流程示意图;
图2d是本申请提供的类路径转换为节点集合的示意图;
图3是本申请提供的文件共享装置的一种结构示意图;
图4是本申请提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提供一种文件共享方法、装置、电子设备和存储介质。
其中,该文件共享装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(Personal Computer,PC)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。在一些实施例中,服务器也可以以终端的形式来实现。
在一些实施例中,该文件共享装置还可以集成在多个电子设备中,比如,文件共享装置可以集成在多个服务器中,由多个服务器来实现本申请的文件共享方法。
例如,该文件共享装置可以集成在电子设备中,该电子设备搭载有操作系统,该操作系统不做限制,可以是Windows操作系统、Linux操作系统等,也可以是移动操作系统(如Android、iOS等)。该电子设备还安装有多个应用程序,该应用程序可以在操作系统上运行。该电子设备可以当检测到目标应用程序启动时,获取目标信息集合,目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息;基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的;响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
本方案中,将多个应用程序曾访问的数据生成了共享文件,并形成资源所对应信息的集合存储在电子设备中;当目标应用程序启动时,则根据该目标应用程序的资源所对应信息的集合,将共享文件与虚拟映射空间对应;当目标应用程序需要访问目标数据时,将共享文件加载到共享物理空间中;当下一个应用程序需要访问目标数据时,可复用目标应用程序对应的共享物理空间,访问该共享物理空间中共享文件中的数据。由此,多个应用程序可以共用同一个共享物理空间中的共享文件,减少了资源消耗。
以下分别进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。
在本实施例中,提供了一种文件共享方法,如图1a所示,该文件共享方法的具体流程可以如下:
101、当检测到目标应用程序启动时,获取目标信息集合。
其中,目标应用程序为电子设备安装的多个应用程序中的任一应用程序,应用程序是运行于操作系统之上的计算机程序,可以采用不同的编程语言进行开发,例如,可以采用Java、c++等编程语言进行开发。
目标应用程序的资源可以以文件的形式存储在电子设备的存储设备(如硬盘)中;例如,目标应用程序的资源可以是目标应用程序对应的多个共享文件,该文件中可以存储计算机程序。目标信息集合的获取方式不做限制。
目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息、目标共享节点的节点信息等。
在一些实施例中,电子设备可以在目标应用程序启动后,获取目标应用程序的资源路径;其中,资源路径可以指系统访问的路径,且路径下的所有文件均可被应用程序读取,例如可以为类路径(class path),具体的表现形式可以为{rt.jar:a.jar:b.jar:c.jar:d.jar:e.jar}。
进而,电子设备根据目标应用程序的资源路径和共享资源所对应信息的集合,确定目标信息集合。其中,共享资源可以表示多个应用程序的资源;共享资源所对应信息的集合可以表示多个应用程序的资源所对应信息的集合,可以包括但不限于共享节点集合、共享节点集合的节点索引信息。
获取共享资源所对应信息的集合的具体实施方式不做限制。
一、电子设备获取多个应用程序在运行时访问的运行数据的信息;其中,运行数据可以为应用程序运行时访问的数据;例如,可以为应用程序在运行时访问的计算机程序,该计算机程序可以为基本数据类型和引用数据类型等,具体地,可以为类、接口、枚举、注解等;需要说明的是,当运行数据为计算机程序对应的类时,访问运行数据也可称为加载类。应用程序的运行数据的信息可以包括但不限于运行数据之间的依赖关系、运行数据所属的文件集合、运行数据的类名,等等。以运行数据为应用程序在运行时加载的多个类为例,运行数据的信息可以包括但不限于:1)每个类的类名;2)每个类所属的文件集合(类的来源),例如文件集合可以为jar/module集合(简称jar包),如表1中所示的rt.jar;3)每个类的依赖关系,例如可以包括该类依赖的接口、父类的信息(依赖类的信息),该依赖类的信息可以包括类名、所属的文件集合;以一个应用程序为例,表1可以表示一个应用程序加载的类的依赖关系;4)应用程序对应的类路径下所有文件集合的信息。
表1应用程序加载的类的依赖关系
二、电子设备根据应用程序在运行时访问的运行数据的信息确定共享资源所对应信息的集合。
(1)将运行数据所属的文件集合转换为应用程序对应的节点。
其中,节点中可以包括但不限于如下节点信息:1)节点标识,该标识可以将各个节点进行区分;2)文件集合的列表;3)依赖的节点的信息;4)数据类型集合,例如可以为类列表(class list),具体地,可以为节点对应的文件集合中存储的类的类名所形成的列表,也可以为节点对应的运行数据中类的类名所形成的列表;5)共享文件的信息,如虚拟映射地址、共享文件的文件大小和共享文件的存储地址等,其中,虚拟映射地址可以为对共享文件进行内存映射时的起始地址。
在一些实施例中,从运行数据所属的文件集合中确定包含同名数据类型的文件集合;将包含同名数据类型的文件集合作为一个节点。其中同名数据类型表示该数据的数据类型名以及数据类型的命名空间一致;以jar包为例,确定各个jar包内是否存在同名类(类名以及类的命名空间一致),将包含同名类的jar包作为一个节点。节点内的jar包可以根据应用程序的类路径的顺序进行排序,确保不改变同名类的加载顺序。如表1中,b.jar和c.jar存在同名类,将b.jar,c.jar作为一个节点;则应用程序对应的节点可以有节点1:rt.jar,节点2:a.jar,节点3:b.jar,c.jar,节点4:d.jar,节点5:d.jar。可选地,当将包含同名类的jar包作为一个节点时,将jar包对应的运行数据的数据类型(如类型)形成数据类型集合(如类列表)。
在一些实施例中,也可以直接根据应用程序对应的类路径,将类路径下所有文件集合转换为应用程序对应的节点。
(2)基于运行数据之间的依赖关系和应用程序对应的节点确定共享节点集合。
i.根据运行数据之间的依赖关系确定应用程序对应的节点之间的依赖关系。在一些实施例中,可以根据运行数据之间的依赖关系,将文件集合生成能表示依赖关系的依赖树,例如,如图1b所示,将表1所示的应用程序加载的类的依赖关系进行处理,可以得到个文件集合之间的依赖关系;根据文件集合之间的依赖关系可以得到节点之间的依赖关系;如可以得到节点4:d.jar依赖的节点为节点2:a.jar和节点3:b.jar,c.jar。
ii.根据应用程序对应的节点之间的依赖关系对应用程序对应的节点进行排序,得到应用程序对应的节点集合。在一些实施例中,节点依赖的节点可称为依赖节点,节点的依赖节点排在该节点之前。例如表1所示的应用程序对应的节点集合为{节点1:rt.jar,节点2:a.jar,节点3:b.jar,c.jar,节点4:d.jar,节点5:d.jar}。在一些实施例中,若节点之间无依赖关系,则可以根据类路径的顺序进行排序。
iii、基于应用程序对应的节点集合,确定共享节点集合。
在一些实施例中,将多个应用程序对应的节点集合中所有应用程序共有的节点作为基础共享节点;和/或,将多个应用程序对应的节点集合中至少一个应用程序共有的节点作为局部共享节点;和/或,将多个应用程序对应的节点集合中除基础共享节点和局部共享节之外的节点作为普通节点;确定共享节点集合,共享节点集合包括基础共享节点、局部共享节点和普通节点中至少一项。
其中,以Java应用程序为例,基础共享节点:该节点不依赖于其他节点,由Java语言的软件开发工具包(Java Development Kit,JDK)的核心库,和所有应用程序的类路径的共有部分组成;如果不存在所有类路径同时包含的条件,则基础共享节点仅由JDK核心库组成。局部共享节点:两个或两个以上应用程序的类路径的共同部分,可依赖基础共享节点和其他局部共享节点;普通节点:每个应用程序自己的节点,称为普通节点,可依赖基础共享节点和局部共享节点。
在一些实施例中,对共享节点集合进行排序,以基础共享节点、局部共享节点、普通节点的顺序进行排列;其中,基础共享节点之间按照依赖关系进行排序,局部共享节点之间也按照依赖关系进行排序。
在一些实施例中,根据共享节点集合中共享节点之间的依赖关系,生成节点索引信息;其中,节点索引信息可以以列表的形式体现,如图1c所示,是一种节点索引表的示意图,表示了一个基础共享节点、两个局部共享节点和两个普通节点生成的节点索引信息。节点索引表中可以存储节点的节点信息、依赖节点的标识、节点对应的共享文件的信息等。
基于基础共享节点对应的运行数据生成基础共享节点对应的共享文件和共享文件的信息;和/或,基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件和共享文件的信息;和/或,根据节点索引信息和普通节点对应的运行数据,生成普通节点对应的共享文件和共享文件的信息;基于基础共享节点对应的共享文件的信息和/或局部共享节点对应的共享文件的信息和/或普通节点对应的共享文件的信息,更新节点索引信息。
其中,共享文件中可以包括但不限于:1)共享文件对应节点的节点标识;2)入口信息,例如可以包括类路径的入口信息(class path entry)、依赖节点的节点标识、依赖节点的虚拟映射地址、依赖节点的共享文件的存放路径和文件大小以及生成共享文件的时间戳等;3)数据类型集合,具体地,可以为节点对应的文件集合中类的类名所形成的列表(类列表);4)虚拟映射地址;5)共享归档文件,如Java共享归档文件(Java Shared Archive,JSA),以约定的格式存储类。
基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件和共享文件的信息可以包括如下步骤:根据节点索引信息确定局部共享节点依赖的基础共享节点;根据节点索引信中共享文件的信息加载共享文件;基于局部共享节点依赖的基础共享节点的共享文件和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件。
基于节点索引信息和普通节点对应的运行数据,生成普通节点对应的共享文件和共享文件的信息可以包括如下步骤:根据节点索引信息确定普通节点的依赖节点,如依赖的局部共享节点,该局部共享节点依赖的基础共享节点;根据节点索引信息中共享文件的信息加载依赖节点对应的共享文件;基于依赖节点的共享文件和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件。
在一些实施例中,可以根据资源路径下的文件集合中文件来生成共享文件。
在一些实施例中,当生成基础共享节点对应的共享文件时,可以确定基础共享节点对应的虚拟映射地址,如文件生成阶段(dump)生成共享文件的起始地址;根据基础共享节点对应的虚拟映射地址更新节点索引信息。
当基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件时,从节点索引信息中获取基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址。根据基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址,计算当前局部共享节点的虚拟映射地址;基于当前局部共享节点的虚拟映射地址,更新节点索引信息。
当基于节点索引信息和普通节点对应的运行数据,生成普通节点对应的共享文件时,从节点索引信息中获取基础共享节点对应的虚拟映射地址和局部共享节点的虚拟映射地址以及已生成共享文件的普通节点的虚拟映射地址;然后根据获取到的虚拟地址,计算当前普通节点的虚拟映射地址;基于当前普通节点的虚拟映射地址,更新节点索引信息。即为每个节点对应的共享文件选择一个没有被占用的虚拟映射地址,可以让不同节点的共享文件在不同的地址进行内存映射。
在一些实施例中,可以通过多个应用程序的资源路径对应的文件集合记录的依赖关系来产生共享资源所对应的信息的集合。
在一些实施例中,可以在确定共享资源所对应信息的集合时,根据共享资源所对应信息的集合,确定每个应用程序对应的资源所对应信息的集合。
在一些实施例中,可以获取共享资源所对应信息的集合之后,根据资源路径对应的文件集合和共享节点集合,确定目标应用程序对应的节点;根据节点索引信息获取对应的共享文件的信息,从而得到目标信息集合。
102、基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的。
其中,映射关系可以表示目标虚拟映射空间与目标共享文件之间的关系。在一些实施例中,映射关系具体可以为指针。
目标虚拟映射空间为目标应用程序运行时的虚拟地址空间中的部分空间。在一些实施例中,当基于指针访问目标虚拟映射空间时,实际上访问的与目标虚拟映射空间对应的共享物理空间;目标虚拟映射空间可以转换为共享物理空间,例如,可以采用MMU(MemoryManagement Unit)进行目标虚拟映射空间到共享物理空间的转换。
在一些实施例中,目标共享文件的信息包括目标虚拟映射地址、目标共享文件的文件大小和目标共享文件的存储地址等。根据目标虚拟映射地址、目标共享文件的文件大小确定目标虚拟映射空间。
基于目标虚拟映射空间对目标共享文件进行内存映射,当内存映射失败时,在虚拟地址空间中确定新的虚拟映射地址,虚拟地址空间是目标应用程序运行时对应的虚拟地址空间;基于新的虚拟映射空间,对目标共享文件进行内存重映射,新的虚拟映射空间与新的虚拟映射地址对应;当内存重映射成功时,将目标信息集合中的目标虚拟映射地址更新为新的虚拟映射地址。
例如,内存映射的具体方式可以为调用mmap函数,将目标共享文件从起始地址开始与虚拟映射空间对应,内存映射成功后向应用程序对应的进程返回指针;并设置为可共享模式,即可以与其他应用程序的进程共享该虚拟映射空间对应的共享物理空间。当内存映射失败时,在虚拟地址空间中选择一块足够的空闲内存作为新的虚拟映射空间,进行内存重映射。重映射成功后需要对内部指针进行更新(relocation),同时标记目标共享节点的虚拟映射地址发生变化,并记录新的虚拟映射地址;内存重映射时,设置为不可共享模式,该新的虚拟映射空间对应的共享物理空间无法与其他应用程序对应的进程共享。
在一些实施例中,如果内存重映射还是失败,则不再使用目标共享文件,应用程序对应的进程从原始的文件集合中读取目标共享节点对应的类;同时标记该节点失效,在加载后续节点对应的共享文件时,如果后续的节点依赖该节点,则直接放弃后续的节点。如果目标共享节点存在依赖节点,并且依赖节点的虚拟映射地址发生变化,需要对该节点内的指针进行更新relocation。
在一些实施例中,目标共享文件为目标共享节点对应的共享文件,电子设备在加载目标共享文件之前还执行如下步骤,获取节点索引信息;基于节点索引信息,确定目标共享节点依赖的节点(依赖节点),对目标共享节点依赖的节点对应的共享文件进行内存映射。
在一些实施例中,电子设备可以根据目标信息集合中共享节点的顺序分别加载对应的共享文件。
103、响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
其中,访问请求可以是电子设备响应于用户操作应用程序的用户界面时,由应用程序的进程产生的请求;也可以是应用程序运行时应用程序的进程自动产生的请求。
目标数据可以为共享文件中存储的任一数据,例如,目标数据可以为类。
在一些实施例中,当接收到目标应用程序访问目标数据的访问请求时,根据内存映射时获得的指针,访问虚拟映射空间;若目标应用程序是第一次访问虚拟映射空间,此时内存中还不存在与目标虚拟映射空间对应的共享物理空间,因此,将虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,然后就可以利用指针对共享物理空间中的共享文件进行操作。若是在目标应用程序访问虚拟映射空间之前,内存中已经存在共享物理空间,则可能是其他应用程序已经将目标共享文件加载到共享物理空间中,则目标应用程序可以复用该共享物理空间,与其他应用程序共享该共享物理空间中的共享文件。因此,可以实现快速加载文件,提升应用程序的运行速度;并且当多个应用程序加载相同的文件时,没有为每个应用程序开辟一个内存物理空间来加载共享文件,节约了内存资源,降低了资源消耗。
在一些实施例中,目标信息集合中包括目标共享文件对应的数据类型集合。根据目标共享文件中的数据类型集合更新预设的全局数据类型集合;电子设备获取共享物理空间中目标共享文件中的目标数据时,可以在全局数据类型集合中查找目标数据对应的数据类型;根据目标数据对应的数据类型,从共享物理空间中获取目标数据。在一些实施例中,电子设备访问共享物理空间中目标共享文件中的目标数据时,可以直接从目标共享文件中的数据类型集合中查找目标数据对应的数据类型。其中,数据类型可以为类名。
由上可知,本申请以单个、或者多个文件集合为粒度,将资源路径对应的文件集合划分为多个共享节点,每个共享节点生成了对应的共享文件,应用程序可以从多个共享文件中访问数据,非常的灵活。并且,确定了对应虚拟映射空间;当在目标应用程序加载共享文件之前,已经有应用程序加载过共享文件,则内存中存在虚拟映射空间对应的共享物理空间,可以访问共享物理空间中共享文件中的数据;若在目标应用程序加载共享文件之前,没有应用程序加载过共享文件到内存中,才需要将虚拟映射地址转换为共享物理空间,将共享文件加载到共享物理空间中;由此本方案可以提升应用程序的运行速度,减少资源消耗。
根据上述实施例所描述的方法,以下将作进一步详细说明。
本申请提供的文件共享方案可以应用在大数据平台、微服务(Serverless)等场景中;其中:
Serverless场景不同的应用程序部署在同一个电子设备上,不同的应用程序由相同的基础jar包,和独立的业务jar包构建,通过文件共享方案可以进一步节省云上业务的资源消耗。
大数据平台场景中,例如基于Hadoop搭建的大数据处理中心。Hadoop本身是一个分布式基础框架,包括HDFS(Hadoop Distribute File System)、YARN(Yet AnotherResource Negotiator)、MapReduce(映射(Map)和归约(Reduce))三个主要部分,其中HDFS负责存储,YARN负责资源调度,MapReduce则负责实际的计算部分,MapReduce包含若干计算流程。在实际使用中,Map任务和Reduce任务使用的是相同的Java应用程序,根据不同的调用来进行不同的计算,且大量重复出现。在实际的生产环境中,这些Java进程的class path存在部分一致性,但不同的任务,又会使用不同的jar包;同时使用版本的不一致,也会导致使用的jar包不一致。以Hibench(大数据基准测试工具)为例,不同的任务使用的jar包,如图2a所示。采用本方案提出文件共享方案可以提升大数据平台的运行效率,并节省系统资源。
在本实施例中,将以Java应用程序为例,对本申请的方法进行详细说明。假设,电子设备上安装有4个的应用程序,该应用程序都是采用Java编程语言和开发平台进行开发的,每个应用程序在运行时分别对应一个进程。每个应用程序对应一个JVM(Java虚拟机,Java Virtual Machine)实例,分别为JVM实例1、JVM实例2、JVM实例3、JVM实例4。如图2b所示,为多个应用程序对应的类路径的示意图。
如图2c所示,一种文件共享方法具体流程如下:
201、采集应用程序在运行时访问的运行数据的信息。
其中,运行数据的信息包括:每个应用程序在运行时加载的类的类名;每个类所属的jar包;每个类的依赖关系,即每个类依赖的类的信息,每个类依赖的类的信息可以包括接口(interface)和父类(parent class)信息,该信息包括类名,所属jar包的信息;当前应用程序对应的类路径的所有jar包的信息。在一些实施例中,采集电子设备所有应用程序在运行时的运行数据的信息。
202、根据应用程序在运行时访问的运行数据的信息确定共享节点集合。
1)将类所属的jar包转换为应用程序对应的节点;
2)根据应用程序在运行时加载的类的依赖关系,生成节点对应的依赖树。
3)根据加载的类的类名和命名空间,确定任意两个节点对应的jar包之间是否存在同名类,若存在,则将两个节点合并为一个节点。如图2b所示,假设,a.jar和c.jar存在同名类,将a.jar、c.jar作为一个节点。共享节点包括节点信息,节点信息具体可以为:节点唯一标识;包含jar包列表;依赖节点的节点信息;对应的类列表(class list);共享文件的信息:内存映射的起始地址,文件大小。
4)根据节点间的依赖树生成对应的节点集合,如果节点间无依赖关系,则根据预设的顺序进行排序,该预设的顺序根据class path确定。
在一些实施例中,根据上述步骤生成四个应用程序对应的节点集合。
将多个应用程序对应的节点集合中所有应用程序共有的共享节点{rt.jar,b.jar,a.jar,c.jar}作为基础共享节点,将多个应用程序对应的节点集合中至少一个应用程序共有的共享节点{d.jar},{e.jar}作为局部共享节点,将所述多个应用程序对应的节点集合中除所述基础共享节点和局部共享节之外的共享节点{f1.jar},{f2.jar},{f3.jar},{f4.jar}作为普通节点;所有节点共同组成共享节点集合。共享集合中节点间的顺序根据节点依赖关系排序,如无依赖关系,按照原有的class path顺序进行排序。
203、根据共享节点集合中节点的节点信息生成节点索引信息。
根据共享节点对应的类的依赖关系确定节点之间的依赖关系。基于节点的节点信息和节点之间的依赖关系生成节点索引信息。
204、根据节点索引信息和共享节点集合为共享节点集合中每个共享节点生成共享文件。
其中,共享文件(Enhanced Java Shared Archive,EJSA)中可以包括但不限于:1)共享文件对应节点的节点标识;2)类路径的入口信息、依赖节点的节点标识、依赖节点的虚拟映射地址、依赖节点的共享文件的存放路径和文件大小以及生成共享文件的时间戳等;3)类列表,节点对应的文件集合中类的类名所形成的列表;4)虚拟映射地址;5)Java共享归档文件。
i.为基础共享节点生成共享文件,dump流程同标准的JSA生成流程;dump完成后,记录dump的起始地址(虚拟映射地址)和共享文件的信息,更新节点索引信息中基础共享节点的节点信息;
ii.为局部共享节点和普通节点生成共享文件:
a)根据节点信息中依赖节点的节点标识,从节点索引信息中获取已生成共享文件的节点对应的共享文件的信息,根据共享文件的信息加载对应的共享文件。
b)计算当前节点dump的起始地址:
根据基础共享节点和已生成共享文件的局部共享节点的节点信息,计算当前局部共享节点的起始地址;目的是让不同的局部共享节点可以在不同地址进行内存映射;
对于普通节点,根据基础节点,依赖的局部共享节点的节点信息,计算出当前普通节点的起始地址;
c)根据节点对应的类列表,加载相应的类;加载过程中不允许加载非类列表中的类,如出现直接抛异常,跳过当前类的加载过程;所有的类加载完成后,生成新的共享文件;
d)Dump完成后,根据节点信息更新节点索引信息。
205、当检测到目标应用程序启动时,获取目标信息集合,目标信息集合中包括目标共享文件的信息,目标共享文件的信息包括虚拟映射地址、目标共享文件的文件大小。
将目标应用程序对应的类路径根据共享节点集合,转化为由节点组合而成的节点集合。转化方式有如下两种:a)目标应用程序启动前,预先处理class path;b)目标应用程序启动后,动态转化class path;转化后的class path变为:基础共享节点,局部共享节点,普通节点的形式,如图2d所示;目标共享节点为目标应用程序对应的节点集合中的任一节点。
目标应用程序启动后,加载目标应用程序对应的节点集合中各节点的节点信息到内存中。
在一些实施例中,初始化全局类加载列表。
206、基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的。
在一些实施例中,可以根据目标应用程序对应的节点集合中节点的顺序分别加载对应的共享文件:
目标共享节点与目标共享文件对应,电子设备可以为调用mmap函数,将目标共享文件从起始地址开始与虚拟映射空间对应,内存映射成功后向应用程序对应的进程返回指针;并设置为可共享模式,即可以与其他应用程序的进程共享该虚拟映射空间对应的共享物理空间。
当内存映射失败时,在虚拟地址空间中选择一块足够的空闲内存作为新的虚拟映射空间,进行内存重映射。重映射成功后需要对内部指针进行更新(relocation),同时标记目标共享节点的虚拟映射地址发生变化,并记录新的虚拟映射地址;内存重映射时,设置为不可共享模式,该新的虚拟映射空间对应的共享物理空间无法与其他应用程序对应的进程共享。
如果内存重映射还是失败,则不再使用目标共享文件,应用程序对应的进程从原始的jar包中读取目标共享节点对应的类;同时标记该节点失效,在加载后续节点对应的共享文件时,如果后续的节点依赖该节点,则直接放弃后续的节点。
如果目标共享节点存在依赖节点,并且依赖节点的虚拟映射地址发生变化,需要对该依赖节点内的指针进行更新relocation,指向新的虚拟映射地址。
加载节点对应的共享文件时,可以将节点对应的类列表,更新到全局类列表中。
207、响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
在一些实施例中,目标信息集合中包括目标共享文件对应的类列表。根据目标共享文件中的类列表更新预设的全局类加载列表;电子设备获取共享物理空间中目标共享文件中的目标类时,可以在全局类加载列表中查找目标类对应的类名;根据目标类对应的类名,从共享物理空间中获取类。在一些实施例中,电子设备访问共享物理空间中目标共享文件中的目标类时,可以直接从目标共享文件中的类列表中查找目标类对应的类名。
在一些实施例中,电子设备访问共享物理空间中目标共享文件中的类时,可以在全局类列表中查找该类;根据该类在共享物理空间创建相应的类对象。
由上可知,本申请以单个、或者多个jar包为粒度,将类路径对应的jar包划分为多个共享节点,每个共享节点生成了对应的共享文件,应用程序可以从多个共享文件中加载类,非常的灵活。并且,为每个共享文件确定了对应虚拟映射空间;当在目标应用程序加载共享文件之前,已经有应用程序加载过共享文件,则内存中存在虚拟映射空间对应的共享物理空间,就可以访问共享物理空间中共享文件中的类了;若在目标应用程序加载共享文件之前,没有应用程序加载过共享文件到内存中,才需要将虚拟映射地址转换为共享物理空间,将共享文件加载到共享物理空间中;由此,本方案可以提升应用程序的运行速度,并且多个应用程序可以共用同一个共享物理空间中的共享文件,减少了资源消耗。
为了更好地实施以上方法,本申请还提供一种文件共享装置,该文件共享装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
比如,在本实施例中,将以文件共享装置具体集成在电子设备为例,对本申请的方法进行详细说明。
例如,如图3所示,该文件共享装置可以包括获取单元301、映射单元302、响应单元303,如下:
(一)获取单元301:
获取单元301,用于当检测到目标应用程序启动时,获取目标信息集合,目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息。
(二)映射单元302:
映射单元302,用于基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的。
(三)响应单元303:
响应单元303,用于响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与所述目标虚拟映射空间对应的共享物理空间当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
在一些实施例中,文件共享装置还用于:
获取多个应用程序在运行时访问的运行数据的信息,多个应用程序包括目标应用程序;
根据应用程序在运行时访问的运行数据的信息确定共享资源所对应信息的集合;
获取目标信息集合,包括:
获取目标应用程序的资源路径;
根据目标应用程序的资源路径和共享资源所对应信息的集合,确定目标信息集合。
在一些实施例中,应用程序的运行数据的信息包括运行数据之间的依赖关系、运行数据所属的文件集合,共享资源所对应信息的集合包括共享节点集合,文件共享装置具体用于:
将运行数据所属的文件集合转换为应用程序对应的节点;
基于运行数据之间的依赖关系和应用程序对应的节点确定共享节点集合。
在一些实施例中,文件共享装置具体用于:
根据运行数据之间的依赖关系确定应用程序对应的节点之间的依赖关系;
根据应用程序对应的节点之间的依赖关系对应用程序对应的节点进行排序,得到应用程序对应的节点集合;
基于应用程序对应的节点集合,确定共享节点集合。
在一些实施例中,文件共享装置具体用于:
将多个应用程序对应的节点集合中所有应用程序共有的节点作为基础共享节点;和/或,
将多个应用程序对应的节点集合中至少一个应用程序共有的节点作为局部共享节点;和/或,
将多个应用程序对应的节点集合中除基础共享节点和局部共享节之外的节点作为普通节点;
确定共享节点集合,共享节点集合包括基础共享节点、局部共享节点和普通节点中至少一项。
在一些实施例中,文件共享装置具体用于:
根据共享节点集合中共享节点之间的依赖关系,生成节点索引信息;
基于基础共享节点对应的运行数据生成基础共享节点对应的共享文件和共享文件的信息;和/或,
基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件和共享文件的信息;和/或,
根据节点索引信息和普通节点对应的运行数据,生成普通节点对应的共享文件和共享文件的信息;
基于基础共享节点对应的共享文件的信息和/或局部共享节点对应的共享文件的信息和/或普通节点对应的共享文件的信息,更新节点索引信息。
在一些实施例中,文件共享装置具体用于:
根据节点索引信息确定局部共享节点依赖的基础共享节点;
基于局部共享节点依赖的基础共享节点的共享文件和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件。
在一些实施例中,文件共享装置具体用于:
确定基础共享节点对应的虚拟映射地址;
根据基础共享节点对应的虚拟映射地址更新节点索引信息;
基于节点索引信息和局部共享节点对应的运行数据,生成局部共享节点对应的共享文件,还包括:
从节点索引信息中获取基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址;
根据基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址,计算当前局部共享节点的虚拟映射地址;
基于当前局部共享节点的虚拟映射地址,更新节点索引信息。
在一些实施例中,文件共享装置具体用于:
从运行数据所属的文件集合中确定包含同名数据类型的文件集合;
将包含同名数据类型的文件集合作为一个节点。
在一些实施例中,目标信息集合包括目标共享文件中的数据类型集合,文件共享装置还用于:
根据目标共享文件中的数据类型集合更新预设的全局数据类型集合;
获取共享物理空间中目标共享文件中的目标数据,包括:
在全局数据类型集合中查找目标数据对应的数据类型;
根据目标数据对应的数据类型,从共享物理空间中获取目标数据。
在一些实施例中,文件共享装置还用于:
当内存映射失败时,在虚拟地址空间中确定新的虚拟映射地址,虚拟地址空间是目标应用程序运行时对应的虚拟地址空间;
基于新的虚拟映射空间,对目标共享文件进行内存重映射,新的虚拟映射空间与新的虚拟映射地址对应;
当内存重映射成功时,将目标信息集合中的目标虚拟映射地址更新为新的虚拟映射地址。
在一些实施例中,目标共享文件为目标共享节点对应的共享文件,文件共享装置还用于:
获取节点索引信息;
基于节点索引信息,确定目标共享节点依赖的节点;
对目标共享节点依赖的节点对应的共享文件进行内存映射。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由上可知,本实施例的文件共享装置可以通过获取多个应用程序在运行时访问的运行数据的信息,来生成多个应用程序的共享文件以及确定相应虚拟映射空间;当目标应用程序启动时,则基于虚拟映射空间对共享文件进行映射,使得共享文件与虚拟映射空间对应;然后响应于目标应用程序的访问目标数据的访问请求,访问共享文件中的目标数据;若在目标应用程序加载共享文件之前,已经有应用程序加载过共享文件,则内存中存在虚拟映射空间对应的共享物理空间,就可以访问共享物理空间中共享文件中的数据了;若在目标应用程序加载共享文件之前,没有应用程序加载过共享文件到内存中,才需要将虚拟映射地址转换为共享物理空间,将共享文件加载到共享物理空间中。由此,多个应用程序可以共用同一个共享物理空间中的共享文件,减少了资源消耗。
本申请还提供一种电子设备,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑,等等;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,等等。
在一些实施例中,该文件共享装置还可以集成在多个电子设备中,比如,文件共享装置可以集成在多个服务器中,由多个服务器来实现本申请的文件共享方法。
在本实施例中,将以本实施例的电子设备为例进行详细描述,比如,如图4所示,其示出了本申请所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403、输入模块404以及通信模块405等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。在一些实施例中,处理器401可包括一个或多个处理核心;在一些实施例中,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
电子设备还包括给各个部件供电的电源403,在一些实施例中,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入模块404,该输入模块404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
该电子设备还可包括通信模块405,在一些实施例中通信模块405可以包括无线模块,电子设备可以通过该通信模块405的无线模块进行短距离无线传输,从而为用户提供了无线的宽带互联网访问。比如,该通信模块405可以用于帮助用户收发电子邮件、浏览网页和访问流式媒体等。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
当检测到目标应用程序启动时,获取目标信息集合,目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息;
基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的;
响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;
当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;
当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
由上可知,电子设备可以通过获取多个应用程序在运行时访问的运行数据的信息,来生成多个应用程序的共享文件以及确定相应虚拟映射空间;当目标应用程序启动时,则基于虚拟映射空间对共享文件进行映射,使得共享文件与虚拟映射空间对应;然后响应于目标应用程序的访问目标数据的访问请求,访问共享文件中的目标数据;若在目标应用程序加载共享文件之前,已经有应用程序加载过共享文件,则内存中存在虚拟映射空间对应的共享物理空间,就可以访问共享物理空间中共享文件中的数据了;若在目标应用程序加载共享文件之前,没有应用程序加载过共享文件到内存中,才需要将虚拟映射地址转换为共享物理空间,将共享文件加载到共享物理空间中。由此,多个应用程序可以共用同一个共享物理空间中的共享文件,减少了资源消耗。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请所提供的任一种文件共享方法中的步骤。例如,该指令可以执行如下步骤:
当检测到目标应用程序启动时,获取目标信息集合,目标信息集合为目标应用程序的资源所对应信息的集合,目标信息集合中包括目标共享文件的信息;
基于目标虚拟映射空间对目标共享文件进行内存映射,得到映射关系,目标虚拟映射空间是根据目标共享文件的信息确定的;
响应于目标应用程序访问目标数据的访问请求,基于映射关系访问与目标虚拟映射空间对应的共享物理空间;
当访问与目标虚拟映射空间对应的共享物理空间成功时,获取共享物理空间中目标共享文件中的目标数据;
当访问与目标虚拟映射空间对应的共享物理空间失败时,将目标虚拟空间转换为内存中的共享物理空间,并将目标共享文件中的数据加载到共享物理空间中,获取共享物理空间中目标共享文件中的目标数据。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中提供的大数据平台方面或者微服务方面的各种可选实现方式中提供的方法。
由于该存储介质中所存储的指令,可以执行本申请所提供的任一种文件共享方法中的步骤,因此,可以实现本申请所提供的任一种文件共享方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请所提供的一种文件共享方法、装置、电子设备和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (15)
1.一种文件共享方法,其特征在于,包括:
当检测到目标应用程序启动时,获取目标信息集合,所述目标信息集合为所述目标应用程序的资源所对应信息的集合,所述目标信息集合中包括目标共享文件的信息;
基于目标虚拟映射空间对所述目标共享文件进行内存映射,得到映射关系,所述目标虚拟映射空间是根据所述目标共享文件的信息确定的;
响应于所述目标应用程序访问目标数据的访问请求,基于所述映射关系访问与所述目标虚拟映射空间对应的共享物理空间;
当访问与所述目标虚拟映射空间对应的共享物理空间成功时,获取所述共享物理空间中所述目标共享文件中的目标数据;
当访问与所述目标虚拟映射空间对应的共享物理空间失败时,将所述目标虚拟空间转换为内存中的共享物理空间,并将所述目标共享文件中的数据加载到所述共享物理空间中,获取所述共享物理空间中所述目标共享文件中的目标数据。
2.如权利要求1所述的文件共享方法,其特征在于,所述获取目标信息集合之前,还包括:
获取多个应用程序在运行时访问的运行数据的信息,所述多个应用程序包括目标应用程序;
根据所述应用程序在运行时访问的运行数据的信息确定共享资源所对应信息的集合;
所述获取目标信息集合,包括:
获取所述目标应用程序的资源路径;
根据所述目标应用程序的资源路径和所述共享资源所对应信息的集合,确定所述目标信息集合。
3.如权利要求2所述的文件共享方法,其特征在于,所述应用程序的运行数据的信息包括所述运行数据之间的依赖关系、所述运行数据所属的文件集合,所述共享资源所对应信息的集合包括共享节点集合,所述根据所述应用程序在运行时访问的运行数据的信息确定共享资源所对应信息的集合包括:
将所述运行数据所属的文件集合转换为所述应用程序对应的节点;
基于所述运行数据之间的依赖关系和所述应用程序对应的节点确定所述共享节点集合。
4.如权利要求3所述的文件共享方法,其特征在于,所述基于所述运行数据之间的依赖关系和所述应用程序对应的节点确定所述共享节点集合,包括:
根据所述运行数据之间的依赖关系确定所述应用程序对应的节点之间的依赖关系;
根据所述应用程序对应的节点之间的依赖关系对所述应用程序对应的节点进行排序,得到所述应用程序对应的节点集合;
基于所述应用程序对应的节点集合,确定所述共享节点集合。
5.如权利要求4所述的文件共享方法,其特征在于,所述基于所述应用程序对应的节点集合,确定所述共享节点集合,包括:
将所述多个应用程序对应的节点集合中所有应用程序共有的节点作为基础共享节点;和/或,
将所述多个应用程序对应的节点集合中至少一个应用程序共有的节点作为局部共享节点;和/或,
将所述多个应用程序对应的节点集合中除所述基础共享节点和所述局部共享节之外的节点作为普通节点;
确定所述共享节点集合,所述共享节点集合包括所述基础共享节点、局部共享节点和普通节点中至少一项。
6.如权利要求4所述的文件共享方法,其特征在于,所述共享资源所对应信息的集合包括所述共享节点集合的节点索引信息,所述方法还包括:
根据所述共享节点集合中共享节点之间的依赖关系,生成所述节点索引信息;
基于所述基础共享节点对应的运行数据生成所述基础共享节点对应的共享文件和共享文件的信息;和/或,
基于所述节点索引信息和所述局部共享节点对应的运行数据,生成所述局部共享节点对应的共享文件和共享文件的信息;和/或,
根据所述节点索引信息和所述普通节点对应的运行数据,生成所述普通节点对应的共享文件和共享文件的信息;
基于所述基础共享节点对应的共享文件的信息和/或所述局部共享节点对应的共享文件的信息和/或所述普通节点对应的共享文件的信息,更新所述节点索引信息。
7.如权利要求6所述的文件共享方法,其特征在于,所述基于所述节点索引信息和所述局部共享节点对应的运行数据,生成所述局部共享节点对应的共享文件,包括:
根据所述节点索引信息确定所述局部共享节点依赖的基础共享节点;
基于所述局部共享节点依赖的基础共享节点的共享文件和所述局部共享节点对应的运行数据,生成所述局部共享节点对应的共享文件。
8.如权利要求6所述的文件共享方法,其特征在于,所述基于所述基础共享节点对应的运行数据生成所述基础共享节点对应的共享文件,还包括:
确定所述基础共享节点对应的虚拟映射地址;
根据所述基础共享节点对应的虚拟映射地址更新所述节点索引信息;
所述基于所述节点索引信息和所述局部共享节点对应的运行数据,生成所述局部共享节点对应的共享文件,还包括:
从所述节点索引信息中获取所述基础共享节点对应的虚拟映射地址和已生成共享文件的局部共享节点的虚拟映射地址;
根据所述基础共享节点对应的虚拟映射地址和所述已生成共享文件的局部共享节点的虚拟映射地址,计算当前局部共享节点的虚拟映射地址;
基于所述当前局部共享节点的虚拟映射地址,更新所述节点索引信息。
9.如权利要求3所述的文件共享方法,其特征在于,所述将所述运行数据所属的文件集合转换为所述应用程序对应的节点,包括:
从所述运行数据所属的文件集合中确定包含同名数据类型的文件集合;
将所述包含同名数据类型的文件集合作为一个节点。
10.如权利要求1-8中任一项所述的文件共享方法,其特征在于,所述目信息集合包括所述目标共享文件中的数据类型集合,所述将所述目标共享文件中的数据加载到所述共享物理空间中,还包括:
根据所述目标共享文件中的数据类型集合更新预设的全局数据类型集合;
所述获取所述共享物理空间中所述目标共享文件中的目标数据,包括:
在所述全局数据类型集合中查找所述目标数据对应的数据类型;
根据所述目标数据对应的数据类型,从所述共享物理空间中获取所述目标数据。
11.如权利要求1-8中任一项所述的文件共享方法,其特征在于,所述目标共享文件的信息中包括目标虚拟映射地址,所述基于目标虚拟映射空间对所述目标共享文件进行内存映射之后,还包括:
当内存映射失败时,在虚拟地址空间中确定新的虚拟映射地址,所述虚拟地址空间是所述目标应用程序运行时对应的虚拟地址空间;
基于新的虚拟映射空间,对所述目标共享文件进行内存重映射,所述新的虚拟映射空间与所述新的虚拟映射地址对应;
当内存重映射成功时,将所述目标信息集合中的目标虚拟映射地址更新为所述新的虚拟映射地址。
12.如权利要求1-8中任一项所述的文件共享方法,其特征在于,所述目标共享文件为目标共享节点对应的共享文件,所述基于目标虚拟映射空间对所述目标共享文件进行内存映射之前,还包括:
获取节点索引信息;
基于所述节点索引信息,确定所述目标共享节点依赖的节点;
对所述目标共享节点依赖的节点对应的共享文件进行内存映射。
13.一种文件共享装置,其特征在于,包括:
获取单元,用于当检测到目标应用程序启动时,获取目标信息集合,所述目标信息集合为所述目标应用程序的资源所对应信息的集合,所述目标信息集合中包括目标共享文件的信息和目标虚拟映射地址;
映射单元,用于基于目标虚拟映射空间对所述目标共享文件进行内存映射,得到映射关系,所述目标虚拟映射空间是根据所述目标共享文件的信息和目标虚拟映射地址确定的;
响应单元,用于响应于所述目标应用程序访问目标数据的访问请求,基于所述映射关系访问与所述目标虚拟映射空间对应的共享物理空间;当访问与所述目标虚拟映射空间对应的共享物理空间成功时,获取所述共享物理空间中所述目标共享文件中的目标数据;当访问与所述目标虚拟映射空间对应的共享物理空间失败时,将所述目标虚拟空间转换为内存中的共享物理空间,并将所述目标共享文件中的数据加载到所述共享物理空间中,获取所述共享物理空间中所述目标共享文件中的目标数据。
14.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行如权利要求1~12任一项所述的文件共享方法中的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1~12任一项所述的文件共享方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110921370.9A CN115934662A (zh) | 2021-08-11 | 2021-08-11 | 文件共享方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110921370.9A CN115934662A (zh) | 2021-08-11 | 2021-08-11 | 文件共享方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115934662A true CN115934662A (zh) | 2023-04-07 |
Family
ID=86647755
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110921370.9A Pending CN115934662A (zh) | 2021-08-11 | 2021-08-11 | 文件共享方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115934662A (zh) |
-
2021
- 2021-08-11 CN CN202110921370.9A patent/CN115934662A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108572845B (zh) | 分布式微服务集群的升级方法及相关系统 | |
CN111324571A (zh) | 一种容器集群管理方法、装置及系统 | |
CN113641413B (zh) | 目标模型加载更新方法及装置、可读介质和电子设备 | |
CN111324421B (zh) | 一种容器镜像的提供方法、加载方法及相关设备和系统 | |
US11271895B1 (en) | Implementing advanced networking capabilities using helm charts | |
US11994988B2 (en) | Multi-ring shared, traversable, and dynamic advanced database | |
US11321090B2 (en) | Serializing and/or deserializing programs with serializable state | |
CN108228770A (zh) | 一种应用文件来源查询的方法及装置 | |
CN113010265A (zh) | Pod的调度方法、调度器、存储插件及系统 | |
CN112698921A (zh) | 一种逻辑代码运行方法、装置、计算机设备和存储介质 | |
CN108073423A (zh) | 一种加速器加载方法、系统和加速器加载装置 | |
CN109196476A (zh) | 共享垃圾收集器的不同类型图之间的无缝高性能互操作性 | |
CN112395736A (zh) | 一种分布交互仿真系统的并行仿真作业调度方法 | |
CN110958138B (zh) | 一种容器扩容方法及装置 | |
CN115391427A (zh) | Impala自动化伸缩的系统、方法、介质及设备 | |
CN117724852B (zh) | 一种云电脑计算资源分配方法及装置 | |
CN115328611A (zh) | 虚拟机管理方法、装置、服务器及可读存储介质 | |
CN111694639A (zh) | 进程容器地址的更新方法、装置和电子设备 | |
CN114817160A (zh) | 文件解压方法、装置、电子设备及计算机可读存储介质 | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN112749127A (zh) | 一种用于模型训练的数据提供方法及系统 | |
CN106484375B (zh) | 一种指令块加载方法、软交换设备及系统 | |
CN115934662A (zh) | 文件共享方法、装置、电子设备和存储介质 | |
CN118426977B (zh) | 一种资源配额控制方法、装置以及产品 | |
CN112035174B (zh) | 运行web服务的方法、装置及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |