一种快速加载资源的方法及装置与流程

文档序号:14714076发布日期:2018-06-16 00:59阅读:133来源:国知局
一种快速加载资源的方法及装置与流程

本发明属于资源加载技术领域,尤其涉及一种快速加载资源的方法及装置。



背景技术:

当需使用一应用从而对其进行启动时,首先需启动一资源加载进程来加载该应用的资源数据,现有技术中,资源加载进程先按指定目录读入资源文件(一般是以二进制的形式直接读取),然后预分配内存,最后执行解析函数,把文件中的资源数据解析到分配的内存中,并按构造的相应数据结构对内存中的资源数据进行管理。

对于大型应用而言,启动应用时需加载大量的资源数据,以大型网络游戏为例,由于其游戏功能较多,从而需加载的地图资源、技能资源等各种资源数据也较为丰富,这无疑会导致资源加载过程中读取和解析资源文件的成本较高,如需要消耗较多的磁盘I/O(Input/Output,输入/输出)和CPU(Central Processing Unit,中央处理器)资源等等,同时也会使得资源加载过程耗时较长,最终导致应用的启动时间较长,这对外网运营或内部开发来说都是非常不利的。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种快速加载资源的方法及装置,以至少解决现有技术存在的上述问题,降低资源加载成本、提升资源加载速度。

本发明实施例的方案是这样实现的:

本发明实施例的一种快速加载资源的方法,所述方法包括:

获得待加载资源对应的索引信息;

依据所述待加载资源的索引信息,确定第一存储区域中是否包含所述待加载资源对应的资源数据;其中,所述第一存储区域中预先存储有对预定的各资源进行解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系;

若第一存储区域中包含所述待加载资源对应的资源数据,则读取所述待加载资源对应的资源数据,并将读取的所述资源数据写入第二存储区域;所述第二存储区域为资源加载进程预分配的区域。

本发明实施例的一种快速加载资源的装置,所述装置包括:

获取单元,用于获得待加载资源对应的索引信息;

确定单元,用于依据所述待加载资源对应的索引信息,确定第一存储区域中是否包含所述待加载资源对应的资源数据;其中,所述第一存储区域中预先存储有对预定的各资源进行解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系;

第一写处理单元,用于在第一存储区域中包含所述待加载资源对应的资源数据时,读取所述待加载资源对应的资源数据,并将读取的所述资源数据写入第二存储区域,所述第二存储区域为资源加载进程预分配的区域。

由以上方案可知,采用本发明实施例,由于预先对预定的各资源进行解析,并将解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系存储至第一存储区域,从而在进行资源加载时,可通过获得待加载资源对应的索引信息,并以该索引信息为依据确定第一存储区域中是否包含待加载资源对应的资源数据,在包含时,直接读取该资源数据并将其写入至资源加载进程预分配的第二存储区域,以此实现资源加载。本发明实施例的方案,在进行资源加载过程中,对于能够在第一存储区域命中的已完成解析的资源数据,直接将其拷贝至资源加载进程预分配的区域即可完成该部分资源的加载,避免了每次加载资源时进行大量资源文件的读取及解析,降低了资源加载成本、提升了资源加载速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1是本发明实施例一提供的快速加载资源的方法流程示意图;

图2是本发明实施例二提供的快速加载资源的方法流程示意图;

图3是本发明实施例二提供的共享内存中的资源链表及资源链表的结点结构示意图;

图4是本发明实施例二提供的链表结点中各资源成员的存储情况示意图;

图5是本发明实施例二提供的快速加载资源的一实现过程示意图;

图6是本发明实施例三提供的快速加载资源的装置结构示意图;

图7是本发明实施例四提供的同一台物理机中多个进程共享内存的实现架构图;

图8是本发明实施例四提供的多台物理机中多个进程共享内存的实现架构图。

具体实施方式

为了引用和清楚起见,下文中使用的技术名词、简写或缩写总结解释如下:

共享内存:操作系统管理内存中,开辟一块共享的地址段供数据常驻,并且可以进程间共享。

Lru Cache:Least recently used Cache,是一种按最近最少使用方式淘汰数据的缓存方式。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种快速加载资源的方法及装置,以下通过各个实施例对本发明方案进行说明。

实施例一

本发明实施例的一种快速加载资源的方法,该方法可以在一个资源加载进程实现,所述资源加载进程可以是对某一应用,如大型网络游戏等应用进行启动时,首先启动的用于加载该应用的资源数据的进程,所述资源加载进程可以是服务器进程或客户端进程。参考图1,图1示出了本发明实施例的一种快速加载资源的方法流程图,所述方法可以包括:

步骤101、获得待加载资源对应的索引信息。

此处,获得待加载资源对应的索引信息,具体包括:利用预设算法,生成所述待加载资源对应的索引信息。

其中,所述待加载资源为按照预定的资源划分方式,对待加载的具有完整逻辑意义的资源整体进行划分所得的各个资源单元,在实际应用中,对于一个待启动的应用而言,所述待加载资源可以是启动该应用时对应需加载的该应用整体资源中所包含的一个个资源文件,以大型网络游戏为例,所述待加载资源可以是待加载的地图类资源中的某一个地图资源文件,或者技能类资源中的某一个技能资源文件等等。

此处,所述资源划分方式可由技术人员基于相关考虑进行确定,而不局限于采用某种特定的划分方式。

步骤102、依据所述待加载资源对应的索引信息,确定第一存储区域中是否包含所述待加载资源对应的资源数据;其中,所述第一存储区域中预先存储有对预定的各资源进行解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系。

此处,所述第一存储区域中的资源数据按链表方式存储,所述每一资源数据及每一资源数据与索引信息间的对应关系存储在相应的链表结点中。

也就是说,针对上述采用相应资源划分方式对具有完整逻辑意义的一资源整体进行划分所得的各个资源单元而言,预先对其进行读取、解析,并将对各资源单元解析所得的各资源数据按索引关系存储在为其开辟的一存储区域,即所述第一存储区域中。在所述第一区域存储中,本实施例优选地采用链表形式对解析所得的各个资源数据,以及资源数据与其索引信息间的对应关系进行存储,其中,将每个资源单元解析所得的资源数据及其相对应的索引信息存储在链表的相应结点中,也即,资源链表中的各个链表结点与所述资源整体中的各个资源单元一一对应。

所述依据所述待加载资源对应的索引信息,确定第一存储区域中是否包含所述待加载资源对应的第一资源数据,具体包括:确定所述第一存储区域的资源链表中是否存在与所述待加载资源的索引信息相匹配的链表结点。

步骤103、若第一存储区域中包含所述待加载资源对应的资源数据,则读取所述待加载资源对应的资源数据,并将读取的所述资源数据写入第二存储区域,所述第二存储区域为资源加载进程预分配的区域。

此处,所述读取所述第一资源数据,并将读取的所述第一资源数据写入第二存储区域,具体包括:读取所述相匹配的链表结点中的资源数据,并将读取的资源数据写入所述资源加载进程预分配的第二存储区域,从而完成此部分待加载资源的加载过程。在依据本发明方法依次向第二存储区域写入需加载的资源整体所包含的各个资源单元的资源数据后,即可完成所述资源整体的加载任务。

在本发明实施例一实施方式中,所述方法还包括:若所述第一存储区域中不包含所述待加载资源对应的资源数据,则读取并解析所述待加载资源,并将解析后所得的资源数据写入所述第二存储区域。

在本发明实施例一实施方式中,所述方法还包括:将解析待加载资源所得的资源数据,以及所述资源数据与所述待加载资源的索引信息间的对应关系,写入所述第一存储区域。

在本发明实施例一实施方式中,所述方法还包括:将所述相匹配的链表结点从在所述资源链表所处的当前位置更新至所述资源链表的第一端。

在本发明实施例一实施方式中,所述解析待加载资源所得的资源数据,以及所述资源数据与所述待加载资源的索引信息间的对应关系,写入所述第一存储区域,进一步包括:在所述资源链表的第一端添加新的链表结点,并将解析待加载资源所得的资源数据,以及所述资源数据与所述待加载资源的索引信息间的对应关系,写入所述新的链表结点中。

在本发明实施例一实施方式中,所述方法还包括:当所述第一存储区域符合预定的数据淘汰条件时,确定所述第一存储区域中需淘汰的资源数据,并删除所述需淘汰的资源数据。

在本发明实施例一实施方式中,所述确定所述第一存储区域中需淘汰的资源数据,并删除所述需淘汰的资源数据,进一步包括:按照淘汰最近最少使用的数据的淘汰方式,删除所述资源链表的第二端的链表结点。

在本发明实施例一实施方式中,所述方法还包括:在对所述第一存储区域进行数据访问之前,依据所述数据访问的访问类型,对所述第一存储区域的数据执行相应的加锁操作。

在本发明实施例一实施方式中,所述依据所述数据访问的访问类型,对所述第一存储区域的数据执行相应的加锁操作,进一步包括:若所述访问类型为读取数据,向所述第一存储区域的数据加上共享锁,以使得其他资源加载进程能够读取所述第一存储区域的数据;若所述访问类型为修改数据,向所述第一存储区域的数据加上排他锁,以使得其他资源加载进程不能访问所述第一存储区域的数据。

由以上方案可知,采用本发明实施例,由于预先对预定的各资源进行解析,并将解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系存储至第一存储区域,从而在进行资源加载时,可通过获得待加载资源对应的索引信息,并以该索引信息为依据确定第一存储区域中是否包含待加载资源对应的资源数据,在包含时,直接读取该资源数据并将其写入至资源加载进程预分配的第二存储区域,以此实现资源加载。本发明实施例的方案,在进行资源加载过程中,对于能够在第一存储区域命中的已完成解析的资源数据,直接将其拷贝至资源加载进程预分配的区域即可完成该部分资源的加载,避免了每次加载资源时进行大量资源文件的读取及解析,降低了资源加载成本、提升了资源加载速度。

以下分多个实施例对本发明方案进行详细阐述。

实施例二

如图2所示,所述快速加载资源的方法,可以在一个资源加载进程实现,所述方法包括:

步骤201、利用预设算法,生成所述待加载资源对应的索引信息。

本实施例具体采用MD5(Message-Digest Algorithm 5,消息摘要算法第五版)算法对所述待加载资源(比如当前待加载的某一个资源文件)进行处理,获得该资源的MD5值,并以该待加载资源的MD5值为索引信息。这里,所述预设算法只要能够通过对资源进程处理,生成资源的索引信息即可,不局限于本实施例采用的MD5算法。

步骤202、确定第一存储区域的资源链表中是否存在与所述待加载资源的索引信息相匹配的链表结点。其中,所述第一存储区域中预先存储有对预定的各资源进行解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系;所述第一存储区域中的资源数据按链表方式存储,所述每一资源数据及每一资源数据与索引信息间的对应关系存储在相应的链表结点中。

针对上述采用相应资源划分方式对具有相应完整逻辑意义的一资源整体进行划分所得的各个资源单元而言,本发明实施例预先对其进行读取、解析,并将对各资源单元解析所得的各资源数据按索引关系存储在为其开辟的一存储区域,即所述第一存储区域中。

所述第一存储区域具体可以是一块预先申请的共享内存区域。

实际应用中,可在服务器或客户端第一次加载该具有相应完整逻辑意义的资源整体时,如服务器或客户端第一次启动某一应用而首先加载该应用的应用资源时,先向操作系统申请一块内存池(内存池的大小视需加载资源的数据量而定)作为共享内存,并在该共享内存开辟一块缓存空间(cache),来构造用于管理该共享内存所存储数据的数据结构,一般来说,该数据结构需维护一个共享内存的数据索引表,以方便将数据按索引组织在共享内存中。对于共享内存采用链表方式进行数据存储而言,所述数据索引表可包括资源文件的索引信息与该资源文件所对应的链表结点的地址间(具体可以是结点的首地址)的对应关系。

当服务器第一次启动资源加载进程对资源进行加载时一般需加载大量的资源文件,在加载资源文件之前首先读出文件中对应的解析头文件,该解析头文件会标识资源的一些描述信息,如以地图资源为例,该解析头文件会标识地图具体划分为多少区域,每个区域的层级如何等等,然后资源加载进程会继续根据这个解析头文件的资源描述信息申请所需的内存,之后,依次读取资源文件,一般是以二进制的形式直接读取,计算所读取的资源文件的MD5值,并解析该资源文件,每解析完一个资源文件,就以该文件的MD5值为索引,以资源解析后所得数据的内存开销为内存使用量,向共享内存申请一块所需的存储空间,对于采用链表方式在共享内存存储数据来讲,将解析所得的资源数据及其对应的资源文件的MD5值对应填入到一个相应的链表结点中,共享内存中存储的资源链表及资源链表中的结点结构具体可参考图3所示。

其中,为了方便后续读取链表结点时对链表结点中的数据进行重组,在向链表结点填入数据时,需按资源文件的解析数据中各成员的内存占用情况设置相应的地址偏移量(如以该结点的首地址为基准的偏移量),资源文件的解析数据在链表结点中的存储情况可参考图4所示,图4具体示出了一个链表结点中各资源成员的存储情况,其中,资源成员a是一字符型变量、b是一整型变量,分别占用1字节、4字节的内存空间,p_b是指向b的指针,p_b中存储的是b相应该结点首地址的偏移量,即为5。

在以上预处理的基础上,后续资源加载进程加载资源时通过持有一个固定的、能够映射到该内存池的shm_id(共享内存id)的shm_key(共享内存key)来找到这块内存,便于进程从该内存池中共享数据。

本步骤中,所述资源加载进程通过一shm_key映射到共享内存,即映射到所述第一存储区域,并基于所述数据结构获知共享内存中是否存在与待加载资源的索引信息相匹配的链表结点,这里,相比较于采用现有技术,当加载资源时,本发明不需读取及解析待加载资源,如不需要读取、解析一个个的资源文件,只需以待加载资源的索引信息,即待加载资源文件的MD5值为key,通过查询所述数据结构中维护的索引信息表,来对共享内存中的数据进行命中。

步骤203、若第一存储区域的资源链表中存在与所述待加载资源的索引信息相匹配的链表结点,则读取所述相匹配的链表结点中的资源数据,并将读取的资源数据写入第二存储区域,所述第二存储区域为所述资源加载进程预分配的区域。

如果第一存储区域的资源链表中存在与所述待加载资源的索引信息相匹配的链表结点,也即内存命中的情况下,服务器或客户端通过所述第一加载进程读取所命中的链表结点中的资源数据,并针对所读取数据作相应转换后(如基于新的存储区域对数据做地址转换,使之可用),将读取的资源数据写入第一加载进程预分配的第二存储区域,从而完成此部分能够在共享内存实现命中的待加载资源的加载过程。在依据本发明方法依次向第二存储区域写入需加载的资源整体所包含的各个资源单元的资源数据后,即可完成所述资源整体的加载任务。

所述第二存储区域可以是所述第一加载进程在加载资源时预分配的除所述共享内存之外的另外一块内存区域。

在本发明实施例一实施方式中,所述方法还包括:若所述第一存储区域中不包含所述待加载资源对应的资源数据,则读取并解析所述待加载资源,并将解析后所得的资源数据写入所述第二存储区域。

也就是说,如果第一存储区域的资源链表中不存在与所述待加载资源的索引信息相匹配的链表结点,即内存未命中的情况下,则按现有技术的资源加载方式,对该部分待加载资源,例如当前待加载的某一个地图文件,进行读取并解析,并将解析资源文件后所得的资源数据写入所述第二存储区域,从而完成该部分未能在共享内存命中的资源数据的加载。

其中,上述的内存未命中时的处理过程,主要针对资源发生变动的情况,例如开发人员对应用的资源数据进行增删改而导致的资源变动,或者使用人员(游戏玩家等)基于其使用应用的过程所导致的资源变动等,当资源文件发生变动时(如新增或修改后所得的资源文件),其MD5值会相应改变,从而导致在共享内存中不能命中。

在本发明实施例一实施方式中,所述方法还包括:将所述相匹配的链表结点从在所述资源链表所处的当前位置更新至所述资源链表的第一端。

为便于对共享内存的资源链表进行管理,本实施例采用Lru Cache的管理方式,将每次最新操作的链表结点更新至资源链表的第一端,所述Lru Cache是一种按最近最少使用方式淘汰数据的缓存方式。比如,对于通过内存命中所确定出的资源链表中与待加载资源相对应的链表结点,可将该结点从其在资源链表的当前位置更新至资源链表的表头。

在本发明实施例一实施方式中,所述方法还包括:将解析待加载资源所得的资源数据,以及所述资源数据与所述待加载资源的索引信息间的对应关系,写入所述第一存储区域。

此处,所述将所述解析待加载资源所得的资源数据,以及所述资源数据与所述待加载资源的索引信息间的对应关系,写入所述第一存储区域,具体包括:在所述资源链表的第一端添加新的链表结点,并将解析待加载资源所得的资源数据,以及所述资源数据与所述待加载资源的索引信息间的对应关系,写入所述新的链表结点中。

也就是说,在内存未命中情况下,除了按照现有技术的处理方式,将解析资源文件所得的资源数据写入所述资源加载进程预分配的第二存储区域,完成该部分未命中数据的加载,本实施例还计算该未命中的资源的索引信息,并将其索引信息以及解析所得的资源数据添加至共享内存的资源链表中,其中,基于Lru Cache的管理方式,具体可在资源链表的第一端,如资源链表表头为此次未命中的数据(即最新使用的数据)添加链表结点,并将未命中资源解析后的资源数据及其对应的索引信息填入共享内存资源链表的新添加的表头结点中,同时在cache维持的数据结构中,添加该结点的相关索引项信息,以方便之后再次加载资源时,对共享内存资源链表中添加的该资源进行命中。基于此,完成资源的快速加载的实现过程具体可参考图5所示。

在本发明实施例一实施方式中,所述方法还包括:当所述第一存储区域符合预定的数据淘汰条件时,确定所述第一存储区域中需淘汰的资源数据,并删除所述需淘汰的资源数据。

此处,所述确定所述第一存储区域中需淘汰的资源数据,并删除所述需淘汰的资源数据,具体包括:按照淘汰最近最少使用的数据的淘汰方式,删除所述资源链表的第二端的链表结点。

由于在共享内存未命中的情况下,会将未命中资源的解析数据及其索引信息添加至共享内存的资源链表中,从而为防止共享内存数据溢出,本实施例采用相应数据淘汰机制,在第一存储区域即所述共享内存符合预定的数据淘汰条件时,淘汰掉其中的一部分数据。具体地,所述数据淘汰条件可以基于一定的冗余策略来制定,如设定共享内存的冗余空间容量阈值,从而,在共享内存的剩余空间低于该阈值时,即可判定其满足数据淘汰条件,需淘汰掉共享内存的部分数据。

本实施例基于所采用的Lru Cache管理方式,即淘汰最近最少使用的数据的淘汰方式,具体删除链表中处于链表第二端的链表结点,例如删除资源链表的表尾结点,从而实现对最近最少使用的链表数据进行清除,同时更新cache中维持的数据结构,使其与资源链表动态对应。

本发明实施例提供的上述方案适用于在同一台物理机,基于单进程访问方式(单进程访问共享内存),来多次加载相同资源的场景,如在同一台服务器或客户端,通过多次启动同一个进程来多次加载某一应用。相比较于现有技术需要在每次加载该应用的应用资源时重复解析资源,从而导致出现浪费机器的磁盘IO和CPU资源,以及加载耗时较长、浪费时间等问题,本发明实施例的方案仅需在物理机第一次加载资源时,进行一次资源解析并申请共享内存对其进行存储,在之后每次加载资源时,仅通过对共享内存进行命中,并拷贝共享内存的资源数据即可实现资源加载,节省了机器的磁盘IO和CPU资源、节省了资源加载时间。

为使得本发明方案同样适用于同时启动多进程访问同一共享内存的场景,即在同一物理机或跨物理机同时启动多个资源加载进程来访问共享内存,使得可在同一物理机或跨物理机来完成多个进程的资源加载过程,在本发明实施例一实施方式中,所述方法还包括:在对所述第一存储区域进行数据访问之前,依据所述数据访问的访问类型,对所述第一存储区域的数据执行相应的加锁操作。

本实施中,所述跨物理机具体是指在多个物理机分别启动一个或多个资源加载进程并通过共享所述共享内存中的资源数据进行资源加载。

所述依据所述数据访问的访问类型,对所述第一存储区域的数据执行相应的加锁操作,具体通过以下过程实现:若所述访问类型为读取数据,向所述第一存储区域的数据加上共享锁,以使得其他资源加载进程能够读取所述第一存储区域的数据;若所述访问类型为修改数据,向所述第一存储区域的数据加上排他锁,以使得其他资源加载进程不能访问所述第一存储区域的数据。

本实施例中,所述读取数据的访问类型,具体包括指查询和/或读取共享内存的数据;所述修改数据的访问类型,具体包括向共享内存写入数据、删除共享内存的数据和/或修改共享内存的数据。

本发明实施例采用文件锁来解决多进程(同一物理机或跨物理机的多个资源加载进程)同时访问一块共享内存时牵涉到的资源竞争问题,其中,在查询和/或读取共享内存数据时采用共享锁,在写入数据、删除数据和/或修改数据时,采用排他锁。当某一资源进程向共享内存的数据加上共享锁时,其他进程仍可通过向共享内存加共享锁,实现对共享内存数据进行查询和/或读取,而不能再向共享内存加排他锁,直至各进程的共享锁释放;当某一进程向共享内存的数据加上排他锁时,其他进程不能再向共享内存加任何锁,直至该进程的排他锁释放,以此来实现跨进程锁,从而保证进程间资源的排他性写入和共享访问(查询/读取)。

在实际应用中,跨进程锁除了本发明实施例所使用的文件锁之外,还可以使用信号量、线程锁等跨进程通信的机制作为进程锁使用,另外对于上文的用于资源共享的所述第一存储区域而言,也可采用内存数据库来替代本实施例所采用的共享内存及Lru Cache,不发明对其不作限定。

实施例三

本发明实施例的一种快速加载资源的装置,可以在一个资源加载进程实现,所述资源加载进程可以是对应用,如大型网络游戏等应用进行启动时,首先启动的用于加载该应用的资源数据的进程,所述资源加载进程可以是服务器进程或客户端进程。

参考图6所示,所述快速加载资源的装置包括:获取单元61,用于获得待加载资源对应的索引信息;确定单元62,用于依据所述待加载资源对应的索引信息,确定第一存储区域中是否包含所述待加载资源对应的资源数据;其中,所述第一存储区域中预先存储有对预定的各资源进行解析所得的各资源数据,以及每一资源数据与相对应资源的索引信息间的对应关系;第一写处理单元63,用于在第一存储区域中包含所述待加载资源对应的资源数据时,读取所述待加载资源对应的资源数据,并将读取的所述资源数据写入第二存储区域,所述第二存储区域为所述资源加载进程预分配的区域。

在本发明实施例一实施方式中,所述确定单元,进一步用于:确定所述第一存储区域的资源链表中是否存在与所述待加载资源的索引信息相匹配的链表结点。

在本发明实施例一实施方式中,还包括:位置调整单元,用于将所述相匹配的链表结点从在所述资源链表所处的当前位置更新至所述资源链表的第一端。

在本发明实施例一实施方式中,所述装置还包括:第二写处理单元,用于在第一存储区域中不包含所述待加载资源对应的资源数据时,读取并解析所述待加载资源,并将解析后所得的资源数据写入所述第二存储区域。

在本发明实施例一实施方式中,所述装置还包括:第三写处理单元,用于将解析所述待加载资源所得的资源数据,以及所述资源数据与所述待加载资源对应的索引信息间的对应关系,写入所述第一存储区域。

在本发明实施例一实施方式中,所述第三写处理单元,进一步用于:在所述资源链表的第一端添加新的链表结点,并将解析所述待加载资源所得的资源数据,以及所述资源数据与所述待加载资源对应的索引信息间的对应关系,写入所述新的链表结点中。

在本发明实施例一实施方式中,所述装置还包括:删除单元,用于在所述第一存储区域符合预定的数据淘汰条件时,确定所述第一存储区域中需淘汰的资源数据,并删除所述需淘汰的资源数据。

在本发明实施例一实施方式中,所述删除单元,进一步用于:按照淘汰最近最少使用的数据的淘汰方式,删除所述资源链表的第二端的链表结点。

在本发明实施例一实施方式中,所述装置还包括:加锁单元,用于在对所述第一存储区域进行数据访问之前,依据所述数据访问的访问类型,对所述第一存储区域的数据执行相应的加锁操作。

在本发明实施例一实施方式中,所述加锁单元,进一步用于:在所述访问类型为读取数据时,向所述第一存储区域的数据加上共享锁,以使得其他资源加载进程能够读取所述第一存储区域的数据;在所述访问类型为修改数据时,向所述第一存储区域的数据加上排他锁,以使得其他资源加载进程不能访问所述第一存储区域的数据。

此处,需要说明的是,本实施例涉及的快速加载资源的装置的描述,与上文方法的描述是类似的,且同方法的有益效果描述,对于本发明快速加载资源的装置在本实施例中未披露的技术细节,请参照本发明方法实施例的说明,本实施例对此不再作赘述。

实施例四

本发明实施例的快速加载资源的方案,除了适用于在同一台物理机基于单进程访问方式(单进程访问共享内存)来多次加载相同资源的场景,还适用于在同一物理机或跨物理机同时启动多个进程访问共享内存实现加载相同资源的场景。

接下来,以在同一物理机或跨物理机同时启动多个进程来访问共享内存的场景为例对本发明实施例阐述如下:

对于在同一物理机同时启动多进程访问共享内存的场景,参考图7示出的快速访问资源的架构图,同一物理机中的多个进程,如多个开发人员共用的同一开发机(其中所述开发机对应多个终端,分别由多个开发人员使用)中的多个进程:Process1、Process2......,通过文件锁Flock实现跨进程锁,从而保证进程间资源的排他性写入和共享访问(查询/读取)。

其中,在查询和/或读取共享内存数据时采用共享锁,在写入数据、删除数据和/或修改数据时,采用排他锁。当某一资源进程,如进程Process1向共享内存的数据加上共享锁时,其他进程仍可通过向共享内存加共享锁,实现对共享内存数据进行查询和/或读取,而不能再向共享内存加排他锁,直至各进程的共享锁释放;当某一进程如如进程Process2向共享内存的数据加上排他锁时,其他进程不能再向共享内存加任何锁,直至Process2的排他锁释放。

对于跨物理机同时启动多进程访问共享内存的场景,以服务器为例,在跨物理机时,相同性质的多个服务器(简称服务器群),往往需要加载相同的资源,那么基于本发明实施例的方案只需其中的一台服务器加载过一遍资源(加载资源时解析资源并申请存储空间实现已解析好的资源数据的共享),其他服务器即可共享已完成解析的资源数据,实现资源加载,非常便利。

具体地,当服务器群第一次加载资源时,该群中用于加载该资源的服务器可以申请一个内存物理机,该内存物理机可由所述服务器群中的任一服务器担任,并采用内存数据库对资源文件的解析数据进行存储,在服务器与内存物理机之间加入一个代理服务器Proxy,该代理服务器Proxy利用相应协议如TCP(Transmission Control Protocol,传输控制协议)完成跨物理机的数据转发,并负责文件锁的管理、读写权限的控制等工作,多物理机快速加载资源的技术架构图具体可参考图8所示,基于图8的多物理机架构,当服务器群中的一台服务器加载过一遍资源,实现将加载资源时对解析资源所得的资源数据共享至内存物理机后,该服务器群中的其他服务器就可以通过共享内存物理机中的资源数据,实现快速的资源加载。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。

最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1