CN110399227A - 一种数据访问方法、装置和存储介质 - Google Patents

一种数据访问方法、装置和存储介质 Download PDF

Info

Publication number
CN110399227A
CN110399227A CN201810975818.3A CN201810975818A CN110399227A CN 110399227 A CN110399227 A CN 110399227A CN 201810975818 A CN201810975818 A CN 201810975818A CN 110399227 A CN110399227 A CN 110399227A
Authority
CN
China
Prior art keywords
memory
data
mapping file
lock
shared 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
Application number
CN201810975818.3A
Other languages
English (en)
Other versions
CN110399227B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810975818.3A priority Critical patent/CN110399227B/zh
Publication of CN110399227A publication Critical patent/CN110399227A/zh
Application granted granted Critical
Publication of CN110399227B publication Critical patent/CN110399227B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据访问方法、装置和存储介质,用以在实现数据永久性存储的同时,实现多进程数据访问。所述数据访问方法,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及每个进程在需要向所述内存映射文件中写入共享数据时,包括:向系统获得所述内存映射文件的写锁,所述写锁不允许应用内的其他进程从写入所述共享数据的内存块读取数据或者向所述内存块写入数据;向所述内存映射文件中写入所述共享数据;在写入所述共享数据结束时,释放所述写锁。

Description

一种数据访问方法、装置和存储介质
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据访问方法、装置和存储介质。
背景技术
SharedPreferences(保存用户偏好参数)存储方式是Android中存储轻量级数据的一种方式。SharedPreferences存储主要用来存储一些简单的配置信息,例如,当需要保存用户的一些偏好参数,比如是否自动登陆,是否记住账号密码,是否在Wifi下才能联网等相关信息时,可以使用SharedPreferences存储,其使用键值对提交和保存数据,保存的数据以xml格式存放在本地的/data/data/<package name>/shares_prefs文件夹下。
但是,SharedPreferences缺乏对多进程访问的支持,因此,如何实现多进程数据访问成为现有技术中需要解决的技术问题之一。
发明内容
本发明实施例提供一种数据访问方法、装置和存储介质,用以在实现数据永久性存储的同时,实现多进程数据访问。
第一方面,提供一种数据访问方法,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及每个进程在需要向所述内存映射文件中写入共享数据时,包括:
向系统获得所述内存映射文件的写锁,所述写锁不允许应用内的其他进程从写入所述共享数据的内存块读取数据或者向所述内存块写入数据;
向所述内存映射文件中写入所述共享数据;
在写入所述共享数据结束时,释放所述写锁。
可选地,所述内存映射文件中还存储有第一写指针,所述第一写指针用于指示共享数据在所述内存映射文件中的内存偏移量;以及
所述方法,还包括:
比较缓存的第二写指针和所述第一写指针;
如果所述第二写指针和所述第一写指针不一致,则从所述内存映射文件中读取所述第二写指针与所述第一写指针之间的共享数据并加载至缓存;
更新所述第二写指针为所述第一写指针。
可选地,在向所述内存映射文件中写入共享数据之后,还包括:
根据所述共享数据对应的内存偏移量,修改所述第一写指针和第二写指针。
可选地,所述内存映射文件中还存储有第一内存重整序列号;以及
所述方法,还包括:
比较缓存的第二内存重整序列号和所述第一内存重整序列号;
如果所述第二内存重整序列号与所述第一内存重整序列号不同,则将所述内存映射文件中存储的全部共享数据重新加载至缓存中。
可选地,在向系统获得写锁时,还包括:
如果获得写锁失败,则判断当前是否持有所述内存映射文件的读锁;
如果是,则释放所述读锁;
如果否,则等待应用内的其他进程释放所述内存映射文件的读锁。
可选地,在释放所述写锁之前,还包括:
判断在获得所述内存映射文件的写锁之前是否持有所述内存映射文件的读锁;
如果判断结果为是,则先获得所述内存映射文件的读锁之后再释放所述写锁。
可选地,向所述内存映射文件中写入所述共享数据,包括:
按照写入共享数据的先后顺序,依次将所述共享数据插入到所述内存映射文件中。
可选地,所述共享数据包括键-键值对;以及
所述方法,还包括:
在更新所述内存映射文件中的任一键所对应的键值时,将新的键-键值插入到所述内存映射文件中。
可选地,本发明实施例提供的数据访问方法,每个进程在需要从所述内存映射文件读取共享数据时,还包括:
向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从读取共享数据的内存块读取数据,不允许应用内的其他进程向读取共享数据的内存块写入数据;
从所述内存映射文件中读取共享数据;
在读取共享数据结束后,释放获得的读锁。
可选地,共享数据包括键-键值对;以及
从所述内存映射文件中读取共享数据,具体包括:
针对任一键,如果在所述内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
第二方面,本发明实施例提供另外一种数据访问方法,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及每个进程在需要从所述内存映射文件读取共享数据时,包括:
在需要从内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从所述第二区域读取数据,不允许应用内的其他进程向所述第二区域写入数据;
从所述内存映射文件中读取共享数据;
在读取共享数据结束后,释放获得的读锁。
第三方面,提供一种数据访问装置,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及
所述装置,包括:
第一获得单元,用于在需要向所述内存映射文件中写入共享数据时,向系统获得所述内存映射文件的写锁,所述写锁不允许应用内的其他进程从写入所述共享数据的内存块读取数据或者向所述内存块写入数据;
数据写入单元,用于向所述内存映射文件中写入所述共享数据;
第一释放单元,用于在写入所述共享数据结束时,释放所述写锁。
可选地,所述内存映射文件中还存储有第一写指针,所述第一写指针用于指示共享数据在所述内存映射文件中的内存偏移量;以及
所述装置,还包括:
第一比较单元,用于比较缓存的第二写指针和所述第一写指针;
第一读取单元,用于如果所述第二写指针和所述第一写指针不一致,则从所述内存映射文件中读取所述第二写指针与所述第一写指针之间的共享数据并加载至缓存;
更新单元,用于更新所述第二写指针为所述第一写指针。
可选地,本发明实施例提供的数据访问装置,还包括:
修改单元,用于在所述数据写入单元向所述内存映射文件中写入共享数据之后,根据所述共享数据对应的内存偏移量,修改所述第一写指针和第二写指针。
可选地,所述内存映射文件中还存储有第一内存重整序列号;以及
所述装置,还包括:
第二比较单元,用于比较缓存的第二内存重整序列号和所述第一内存重整序列号;
加载单元,用于如果所述第二内存重整序列号与所述第一内存重整序列号不同,则将所述内存映射文件中存储的全部共享数据重新加载至缓存中。
可选地,本发明实施例提供的数据访问装置,还包括:
第一判断单元,用于在所述获得单元获得写锁失败时,则判断当前是否持有所述内存映射文件的读锁;
第一处理单元,用于在所述第一判断单元的判断结果为是时,释放所述内存映射文件的读锁;在所述第一判断单元的判断结果为否时,等待应用内的其他进程释放所述内存映射文件的读锁。
可选地,本发明实施例提供的数据访问装置,还包括:
第二判断单元,用于在所述释放单元释放所述写锁之前,判断在获得所述内存映射文件的写锁之前是否持有所述内存映射文件的读锁;
第二处理单元,用于在所述第二判断单元的判断结果为是时,先获得所述内存映射文件的读锁之后再释放所述写锁。
可选地,所述数据写入单元,用于按照写入共享数据的先后顺序,依次将所述共享数据插入到所述内存映射文件中。
可选地,所述共享数据包括键-键值对;以及
所述装置,还包括:
第二插入单元,用于在更新所述内存映射文件中的任一键所对应的键值时,将新的键-键值插入到所述内存映射文件中。
可选地,本发明实施例提供的数据访问装置,还包括:
第二获得单元,用于在需要从所述内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从读取共享数据的内存块读取数据,不允许应用内的其他进程向读取共享数据的内存块写入数据;
第二读取单元,用于从所述内存映射文件中读取共享数据;
第二释放单元,用于在读取共享数据结束后,释放获得的读锁。
可选地,所述共享数据包括键-键值对;以及
所述第二读取单元,用于针对任一键,如果在所述内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
第四方面,提供另外一种数据访问装置,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间,包括:
获得单元,用于在需要从内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从所述第二区域读取数据,不允许应用内的其他进程向所述第二区域写入数据;
读取单元,用于从所述内存映射文件中读取共享数据;
释放单元,用于在读取共享数据结束后,释放获得的读锁。
第五方面,提供一种计算装置,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述任一数据访问方法所述的步骤。
第六方面,提供一种计算机可读介质,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行上述任一数据访问方法所述的步骤。
本发明实施例提供的数据访问方法、装置和存储介质,通过在内存中建立内存映射文件存储共享数据,这样,应用内的各进程可以像访问内存一样访问文件,避免了由于程序退出可能导致的数据丢失,实现了共享数据的永久存储,另一方面,本发明实施例中,通过写锁来控制多进程对共享数据的访问,在向内存映射文件写入共享数据时,可以对相应的存储区域加写锁,由此,实现了对多进程数据访问的支持。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例的应用场景示意图;
图2为根据本发明实施方式的数据访问方法的流程示意图;
图3为根据本发明实施方式的两个进程访问内存映射文件的示意图;
图4为根据本发明实施方式的内存中存储的新旧key-value的示意图;
图5a为根据本发明另一实施方式的数据访问方法实施流程示意图;
图5b为根据本发明的多进程数据访问测试结果示意图;
图6为根据本发明实施方式的数据访问装置的结构示意图;
图7为根据本发明另一实施方式的数据访问装置的结构示意图;
图8为根据本发明实施方式的计算装置的结构示意图。
具体实施方式
为了在实现数据永久性存储的同时实现对多进程数据访问的支持,本发明实施例提供了一种数据访问方法、装置和存储介质。
首先,对本发明实施例中涉及的部分用语进行说明,以便于本领域技术人员理解。
跨进程key-value永久存储:key是关键字,value是值,亦称为键-键值对;key-value存储是指可以通过指定的键值,进行访问、存储、更新对应的值的组件;永久存储是指存储的内容永久有效,不会因为App(应用程序)退出、设备关机而丢失数据;跨进程是指这个存储组件可以多个进程同时访问,一个进程产生的数据更新能够对多个进程同时生效。
内存映射文件:内存映射文件,是由一个文件到一块内存的映射,使得应用程序处理文件如同访问内存一样。内存映射文件由操作系统的内存管理程序负责,因此应用程序只需要将内容写入内存,交由操作系统来完成内存到文件的回写操作,不必担心程序退出可能导致的数据丢失。
文件锁:一种实现多进程访问同步限制的技术,分为共享锁(亦称为读锁)和互斥锁(亦称为写锁)。当一个进程对一个文件的某个区域加互斥锁后,其他进程必须等待这个进程解锁,才能获得这个文件区域的访问权限;当一个进程对一个文件的某个区域加共享锁后,其他进程可以获得这个区域的共享锁,但不能获得互斥锁。
mmap:mmap将一个文件或者其它对象映射进内存。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。
MMKV:是基于mmap内存映射的key-value组件。
需要说明的是,本发明中的终端设备可以是个人电脑(英文全称:PersonalComputer,PC)、平板电脑、个人数字助理(Personal Digita l Assistant,PDA)、个人通信业务(英文全称:Personal Communication Service,PCS)电话、笔记本和手机等终端设备,也可以是具有移动终端的计算机,例如,可以是便携式、袖珍式、手持式、计算机内置的或者车载的移动装置,它们能够向用户提供语音和/或数据连通性的设备,以及与无线接入网交换语言和/或数据。
另外,本发明实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
如图1所示,其为本发明实施例提供的数据访问方法的应用场景示意图,本发明实施例提供的数据访问方法可以应用于Android操作系统的数据访问中,为了实现数据永久性的存储,可以通过mmap建立内存映射文件,即提供一段可供随时写入数据的内存空间,将所有的共享数据都写到映射好的内存空间中,应用程序负责向内存映射文件中写入数据,由操作系统完成内存到文件的回写,达到永久存储的效果。
具体实施时,Android应用程序向Android操作系统申请映射文件的内存空间,由Android操作系统分配给应用程序,Android操作系统分配的内存空间可以由内存块组成,每一内存块可以采用内存起始地址+内存偏移量的方式表示,进程向内存映射文件写入的共享数据可以占用一个内存块,也可以占用若干个内存块,Android应用程序内的所有进程共享Android操作系统分配的内存空间,各个进程均可以向Android操作系统分配内存空间中写入数据或者从该内存空间中读取数据,由此实现了对多进程数据访问的支持,而为了提高数据访问的可靠性,本发明实施例中,通过文件锁(写锁或者读锁)实现多进程访问控制。
以下结合具体的实施例分别对进程向内存映射文件中写入共享数据和从内存映射文件中读取数据的流程对本发明实施例提供的数据访问方法进行说明。需要说明的是,本发明实施例中,向内存映射文件中写入共享数据即向系统分配的内存空间包含的内存块中写入共享数据,从内存映射文件中读取数据即为从系统分配的内存空间包含的内存块中读取共享数据。
如图2所示,以一个进程的操作为例,说明本发明实施例提供的数据访问方法的实施流程,图2所示的数据访问方法介绍了进程向内存映射文件写入共享数据的方法,包括以下步骤:
S21、在需要向所述内存映射文件中写入共享数据时,向系统获得所述内存映射文件的写锁。
其中,写锁不允许应用内的其他进程从写入共享数据的内存块读取数据或者向内存块写入数据。也就是说,应用程序内的一个进程在向内存映射文件中写入数据之前,需要先向操作系统申请内存映射文件的写锁,即对内存映射文件加写锁,操作系统在接收到进程的请求之后,可以将该进程申请的操作区域对应的内存块标识为写入操作,如果在该进程写入数据期间,其他进程向操作系统针对相同区域申请读锁或者写锁时,操作系统将拒绝该申请,直至上一进程释放该区域的写锁。也就是说,某进程获得了内存映射文件中某区域的写锁后,其他进程需要等待这个进程解锁,才能获得相应区域的访问权限,即可以获得该区域的读锁或者写锁。
如图3所示,为两个进程访问内存映射文件的示意图。其中,进程A对内存映射文件中的某一区域(对应于内存中的一段内存块)加写锁,并向相应内存块写入数据,在进程A加写锁的过程中,如果进程B需要从相同区域读取数据或者向相同区域写入数据,则需要等待进程A解锁后,再对相应区域加锁以访问该区域。
S22、向内存映射文件中写入共享数据。
本步骤中,进程在获得了内存映射文件某一操作区域的写锁之后,可以向内存映射文件写入共享数据。
具体实施时,如果进程获得内存映射文件某一操作区域的写锁失败,则说明其他进程获得了该区域的写锁或者读锁,那么,该进程需要等待其他进程释放了该区域的写锁后再向系统申请获得该区域的写锁。
S23、在写入共享数据结束时,释放获得的写锁。
具体实施时,进程在完成向内存映射文件某一区域的数据写入操作之后,可以释放其在步骤S21中获得的写锁,以便其他进程可以访问该区域。
本发明实施例中,在向内存映射文件中写入共享数据时,可以按照写入共享数据的先后顺序,依次将共享数据插入到内存映射文件中。即将新增的数据按照内存偏移量递增的顺序依次写入到内存中。以当前内存偏移量为100为例,则进程在向内存中写入数据时,可以从内存偏移量为101开始写入。
在一个实施例中,共享数据可以为键-键值对(key-value),在更新内存映射文件中的任一键所对应的键值时,可以将新的键-键值按照插入的先后顺序依次插入到内存映射文件中,当然也可以根据键在内存映射文件中查找相应的键,然后更新查找到的键对应的键值。如图4所示,其为内存中存储的新旧key-value的示意图。
在插入或者更新操作完成后,进程释放写锁。需要说明的是,在更新数据时,如果采用向内存块中插入新数据的方式时,那么对于同一个键来说,在内存中可能存在有若干个键值,根据本发明实施例的键-键值对的插入原理,在内存中只有最末尾的键值才是最新有效的,因此,在执行读取操作时,只选取最后那个键值作为有效结果。即在读取数据时,针对任一键,如果在内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
由于不断地向内存中插入数据,在写入的数据达到系统分配的内存块末端时,考虑到内存中有不少过期的旧key-value占用了内存空间,因此,本发明实施例中,可以对内存进行重整。例如,进程可以在系统分配的内存偏移量达到最大值时触发内存重整,查找其中存储有多个键值的键,删除过期的key-value,即针对任一key来说,保留内存偏移量最大的键值,删除内存中存储的其余键值。在另一实施例中,还可以按照一定的周期对系统分配的内存块进行重整,本发明实施例对此不进行限定。
具体实施时,在内存重整之后,如果内存空间仍然不足,则可以向系统申请扩大内存映射文件占用的内存空间,例如,申请将内存映射文件占用的内存空间扩大一倍。
由于应用内的各个进程均可向内存映射文件写入数据,为了保证各个进程数据的一致,本发明实施例中,通过写指针对各个进程写入的数据进行同步。
写指针用于指示共享数据在内存映射文件中的内存偏移量。具体实施时,可以分别在内存映射文件和进程内部分别存储写指针,为了描述方便,本发明实施例中称内存映射文件存储的写指针为第一写指针,称进程缓存的写指针为第二写指针。进程在向内存映射文件中写入共享数据之后,可以根据写入的共享数据对应的内存偏移量,修改自身缓存的第二写指针和内存映射文件中存储的第一写指针。
这样,进程通过比较第二写指针与第一写指针是否一致便可以判断是否有其他进程向内存映射文件中写入了数据。具体实施时,如果第二写指针与第一写指针不一致,则说明其他进程进行了写操作,由于写入的数据都在第二写指针对应的内存偏移量之后,新写入的数据可能与之前的数据重复,也可能是全新的数据,而第二写指针之前的数据都是有效的,这种情况下,只需要从内存映射文件中读取第二写指针与第一写指针之间的共享数据并加载至缓存中即可,在加载时,可以插入新的数据或者替换已有数据,本发明实施例对此不进行限定,在完成上述操作之后,进程还需要更新第二写指针为第一写指针,即将写指针同步到最新位置。
具体实施时,由于内存映射文件头部保存了有效内存大小,有效内存大小实际上就是写指针的内存偏移量,因此,具体实施时,可以重用内存有效大小来校对写指针。例如,系统为应用程序分配的内存偏移量120-240之间的内存块,进程在向内存映射文件中写入数据时,从内存偏移量为120的内存块开始依次写入,如果此时内存映射文件的头部记录的有效内存大小为180,则说明当前内存块中已写入的数据对应的内存偏移量为180,即内存映射文件存储的第一写指针对应的内存偏移量为180。
在另一实施例中,由于内存重整以及内存增长(即向系统申请扩大内存映射文件占用的内存空间)后,内存中的数据同样会发生变化,因此,本发明实施例还提供了内存重整以及内存增长后数据同步的方法,以下分别介绍之。
一、内存重整后的数据同步。
对于内存块达到末端时触发的内存重整或者按照设定周期进行的内存重整,为了在各个进程同步内存中存储的共享数据,本发明实施例中,通过在内存映射文件和进程中分别存储一个内存重整序列号,内存重整序列号单调递增,为了便于区域,本发明实施例中称内存映射文件中存储的内存重整序列号为第一内存重整序列号,称进程中缓存的内存重整序列号为第二内存重整序列号。在每次进程内存重整之后,就将内存重整序列号递增。这样,各个进程通过比较第一内存重整序列号和第二内存重整序列号即可确定是否有其他进程触发了内存重整。当进程发现内存被重整了,即可触发本进程的数据同步操作。具体地,各进程可以比较缓存的第二内存重整序列号和所述第一内存重整序列号,如果第二内存重整序列号与第一内存重整序列号不同,则将内存映射文件中存储的全部共享数据重新加载至缓存中。
二、内存增长后的数据同步。
根据本发明实施例,在内存增长之前,会先尝试通过内存重整以释放内存空间,如果内存重整之后内存空间仍然不足才会申请新的内存,因此,本发明实施例中,对于内存增长后的数据同步可以参照内存重整后的数据同步的实施方式,这里不再赘述。
对于新内存的大小,各个进程可以通过查询内存映射文件大小来获得,因此,具体实施时,无需另外在内存映射文件中存储系统分配的内存大小。
如图5a所示,其为本发明实施例提供的另外一种数据访问方法的实施流程示意图,图5a所示的数据访问方法介绍了进程从内存映射文件读取共享数据的方法,包括以下步骤:
S51、在需要从所述内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁。
其中,读锁允许应用内的其他进程从读取共享数据的内存块读取数据,不允许应用内的其他进程向读取共享数据的内存块写入数据。也就是说,应用程序内的一个进程在从内存映射文件读取数据之前,需要先获得内存映射文件的读锁。如果任一进程对内存映射文件中的某一区域加读锁,其他进程可以对相同区域加读锁,但是不能对相同区域加写锁,如果需要加写锁,同样需要等待加读锁的进程解锁后再加写锁。
具体实施时,任一进程需要从内存映射文件某一区域中读取数据时,需要先向系统申请获得该区域的读锁,即对内存映射文件加读锁,操作系统在接收到进程的请求之后,可以将该进程申请的操作区域对应的内存块标识为读取操作,如果在该进程读取数据期间,操作系统允许其他进程针对相同区域获得读锁,但是拒绝其他进程针对相同区域获得写锁,如果有进程需要获得相同区域的读锁,则需要等待上一进程释放该区域的读锁。
S52、从内存映射文件中读取共享数据。
本步骤中,进程在获得了内存映射文件某一操作区域的读锁之后,可以从内存映射文件读取共享数据。
S53、在读取共享数据结束后,释放获得的读锁。
具体实施时,进程在完成向内存映射文件某一区域的数据读取操作之后,可以释放其在步骤S51中获得的读锁,以便其他进程可以访问该区域。
在一个实施例中,共享数据可以包括键-键值对,步骤S52中,针对任一键,如果在内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
本发明实施例中,由于支持多进程的数据访问操作,而且,在进程内部可能涉及子函数的调用,因此,本发明实施例中,在对内存映射文件进行加锁时,需要支持递归加锁,即在进程获得了读锁或者写锁的情况下,需要保证解锁操作不会导致外层的所被解掉。另外,对于多进程的数据访问,还可以存在锁升级和锁降级的需求,锁升级是指将已经获得的读锁升级为写锁,锁降级是指将已经获得的写锁降级为读锁。在锁升级过程中,容易造成死锁,例如,假如A、B进程都持有了读锁,现在都想升级到写锁,就会陷入相互等待的困境,发生死锁。另外,由于现有的文件锁不支持递归锁,因此无法进行锁降级,一降就降到没有锁。
基于此,本发明实施例中通过对文件锁进行封装,增加了读锁计数器和写锁计数器,如表1所示,其为读锁计数器和写锁技术器的实现原理示意:
表1
具体实施时,各个进程针对内存映射文件的某一区域各自维护读锁计数器和写锁计数器。表1中:
第一行数据,读锁计数器和解锁计数器当前计数为0,此时如果进行加读锁或者加写锁操作,则可以对相应的文件区域加读锁或者解读锁,读锁计数器和写锁计数器的计数分别+1;
第二行数据,进程当前获得的读锁为0,写锁为1,此时,如果进行加读锁或者加写锁操作,读锁计数器和写锁计数器的计数分别+1,如果进行解写锁,则对释放相应区域的写锁;
第三行数据中,进程当前获得的读锁为0,写锁为N,如果进行加读锁或者加写锁操作,读锁计数器和写锁计数器的计数分别+1,如果进行解写锁操作,则写锁计数器-1;
第四行数据中,进程当前获得的读锁为1,写锁为0,此时如果进行加读锁操作,则读锁计数器增加1,而如果此时进行加写锁,即执行锁升级操作,可以先尝试加写锁,如果加锁失败则说明其他进程获得了该区域的读锁,则需要先释放获得的读锁,再进行加写锁操作,以避免死锁的发生,如果此时进行解读锁操作,则可以释放获得的读锁;
第五行数据中,进程当前获得的读锁为1,写锁为1,此时如果进行加读锁操作和加写锁操作,则读锁计数器和写锁计数器分别增加1,如果进行解读锁,则读锁计数器-1,而如果此时进行解写锁操作,由于原来获得了读锁,如果直接释放写锁,将导致原来的读锁也会被释放,因此,需要执行加读锁操作,即将写锁降级;
第六行数据中,进程当前获得的读锁为1,写锁为N,此时如果进行加读锁操作和加写锁操作,则读锁计数器和写锁计数器分别增加1,如果进行解读锁操作和解写锁操作,则读锁计数器和写锁计数器分别-1;
第七行数据中,进程当前获得的读锁为N,写锁为0,此时如果进行加读锁操作,则读锁计数器+1,如果进行加写锁操作,为了避免造成死锁,则需要先解读锁再加写锁,如果进行解读锁操作,则将读锁计数器-1;
第八行数据,进程当前获得的读锁为N,写锁为1,此时如果进行加读锁操作和加写锁操作,则读锁计数器和写锁计数器分别+1,如果进行解读锁操作,则读锁计数器-1,如果进行解写锁操作,则由于原来获得了读锁,如果直接释放写锁,将导致原来的读锁也会被释放,因此,需要执行加读锁操作,即将写锁降级;
第九行数据,进程当前获得的读锁为N,写锁为N,此时如果进行加读锁操作和加写锁操作,则读锁计数器和写锁计数器分别+1,如果进行解读锁操作和解写锁操作,则读锁计数器和写锁计数器分别-1。
有上述描述可知,进程在向系统获得写锁时,如果获得写锁失败,则判断当前是否持有内存映射文件的读锁,如果是,则释放获得的读锁;如果否,则等待应用内的其他进程释放内存映射文件的读锁。具体实施时,如果进程向进程获得写锁失败,则说明当前有其他进程获得了内存映射文件的读锁,此时,进程判断自身是否获得了该内存映射文件的读锁,如果是,则需要先释放自身获得的读锁,避免死锁的发生,然后等待其他进程释放该内存映射文件的读锁。如果自身没有持有该内存映射文件的读锁,则等待应用内的其他进程释放所述内存映射文件的读锁即可。
进程释放写锁之前,判断在获得内存映射文件的写锁之前是否持有该内存映射文件的读锁;如果判断结果为是,则先获得该内存映射文件的读锁之后再释放写锁。即在解写锁时,如果之前持有读锁,则不能直接释放掉写锁,这样会导致读锁也被释放,因此,需要先加一个读锁,将锁降级。
为了测试本发明实施例提供的多进程数据访问的性能,创建两个Service(服务),测试MMKV、MultiProcessSharedPreferences、SQLite多进程读写的性能。测试环境:Pixel2 XL 64G,Android 8.1.0,单位:ms。每组测试分别循环1000次;MultiProcessSharedPreferences使用apply()同步数据;SQLite打开WAL(Write-AheadLogging,预写日志系统)选项。如图5b所示,其为测试结果示意图。其中,read int是指从内存映射文件读取整型数据,read string是指从内存映射文件读取字符串,write int是指向内存映射文件写入整型数据,write string是指向内存映射文件写入字符串。
本发明实施例提供的数据访问方法中,通过在内存中建立内存映射文件存储共享数据,这样,应用内的各进程可以像访问内存一样访问文件,避免了由于程序退出可能导致的数据丢失,实现了共享数据的永久存储,另一方面,本发明实施例中,通过写锁来控制多进程对共享数据的访问,在向内存映射文件写入共享数据时,可以对相应的存储区域加写锁,避免其他进程对相同区域进行任何操作,而在从内存映射文件读取数据时,可以对相应的文件区域加读锁,其他进程可以对相同区域进行读操作,但是不能进行写操作,在实现对多进程数据访问的支持的同时,保证了多进程数据访问的可靠性。
基于同一发明构思,本发明实施例中还提供了一种数据访问装置,由于上述装置解决问题的原理与数据访问方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图6所示,其为本发明实施例提供的第一种数据访问装置的结构示意图,包括:
第一获得单元61,用于在需要向所述内存映射文件中写入共享数据时,向系统获得所述内存映射文件的写锁,所述写锁不允许应用内的其他进程从写入所述共享数据的内存块读取数据或者向所述内存块写入数据;
数据写入单元62,用于向所述内存映射文件中写入所述共享数据;
第一释放单元63,用于在写入所述共享数据结束时,释放所述写锁。
可选地,所述内存映射文件中还存储有第一写指针,所述第一写指针用于指示共享数据在所述内存映射文件中的内存偏移量;以及
所述装置,还包括:
第一比较单元,用于比较缓存的第二写指针和所述第一写指针;
第一读取单元,用于如果所述第二写指针和所述第一写指针不一致,则从所述内存映射文件中读取所述第二写指针与所述第一写指针之间的共享数据并加载至缓存;
更新单元,用于更新所述第二写指针为所述第一写指针。
可选地,本发明实施例提供的数据访问装置,还包括:
修改单元,用于在所述数据写入单元向所述内存映射文件中写入共享数据之后,根据所述共享数据对应的内存偏移量,修改所述第一写指针和第二写指针。
可选地,所述内存映射文件中还存储有第一内存重整序列号;以及
所述装置,还包括:
第二比较单元,用于比较缓存的第二内存重整序列号和所述第一内存重整序列号;
加载单元,用于如果所述第二内存重整序列号与所述第一内存重整序列号不同,则将所述内存映射文件中存储的全部共享数据重新加载至缓存中。
可选地,本发明实施例提供的数据访问装置,还包括:
第一判断单元,用于在所述获得单元获得写锁失败时,则判断当前是否持有所述内存映射文件的读锁;
第一处理单元,用于在所述第一判断单元的判断结果为是时,释放所述内存映射文件的读锁;在所述第一判断单元的判断结果为否时,等待应用内的其他进程释放所述内存映射文件的读锁。
可选地,本发明实施例提供的数据访问装置,还包括:
第二判断单元,用于在所述释放单元释放所述写锁之前,判断在获得所述内存映射文件的写锁之前是否持有所述内存映射文件的读锁;
第二处理单元,用于在所述第二判断单元的判断结果为是时,先获得所述内存映射文件的读锁之后再释放所述写锁。
可选地,所述数据写入单元,用于按照写入共享数据的先后顺序,依次将所述共享数据插入到所述内存映射文件中。
可选地,所述共享数据包括键-键值对;以及
所述装置,还包括:
第二插入单元,用于在更新所述内存映射文件中的任一键所对应的键值时,将新的键-键值插入到所述内存映射文件中。
可选地,本发明实施例提供的数据访问装置,还包括:
第二获得单元,用于在需要从所述内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从读取共享数据的内存块读取数据,不允许应用内的其他进程向读取共享数据的内存块写入数据;
第二读取单元,用于从所述内存映射文件中读取共享数据;
第二释放单元,用于在读取共享数据结束后,释放获得的读锁。
可选地,所述共享数据包括键-键值对;以及
所述第二读取单元,用于针对任一键,如果在所述内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
如图7所示,其为本发明实施例提供的第二种数据访问装置的结构示意图,包括:
获得单元71,用于在需要从内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从所述第二区域读取数据,不允许应用内的其他进程向所述第二区域写入数据;
读取单元72,用于从所述内存映射文件中读取共享数据;
释放单元73,用于在读取共享数据结束后,释放获得的读锁。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
在介绍了本发明示例性实施方式的数据访问方法和装置之后,接下来,介绍根据本发明的另一示例性实施方式的计算装置。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本发明的计算装置可以至少包括至少一个处理器、以及至少一个存储器。其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行本说明书上述描述的根据本发明各种示例性实施方式的数据访问方法中的步骤。例如,所述处理器可以执行如图2中所示的步骤S21、在需要向所述内存映射文件中写入共享数据时,向系统获得所述内存映射文件的写锁,和步骤S22、向内存映射文件中写入共享数据;以及步骤S23、在写入共享数据结束时,释放获得的写锁。
下面参照图8来描述根据本发明的这种实施方式的计算装置80。图8显示的计算装置80仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算装置80以通用计算设备的形式表现。计算装置80的组件可以包括但不限于:上述至少一个处理器81、上述至少一个存储器82、连接不同系统组件(包括存储器82和处理器81)的总线83。
总线83表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储器82可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)821和/或高速缓存存储器822,还可以进一步包括只读存储器(ROM)823。
存储器82还可以包括具有一组(至少一个)程序模块824的程序/实用工具825,这样的程序模块824包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算装置80也可以与一个或多个外部设备84(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与计算装置80交互的设备通信,和/或与使得该计算装置80能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口85进行。并且,计算装置80还可以通过网络适配器86与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器86通过总线83与用于计算装置80的其它模块通信。应当理解,尽管图中未示出,可以结合计算装置80使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
在一些可能的实施方式中,本发明提供的数据访问方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的数据访问方法中的步骤,例如,所述计算机设备可以执行如图2中所示的步骤S21、在需要向所述内存映射文件中写入共享数据时,向系统获得所述内存映射文件的写锁,和步骤S22、向内存映射文件中写入共享数据;以及步骤S23、在写入共享数据结束时,释放获得的写锁。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本发明的实施方式的用于数据访问的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (15)

1.一种数据访问方法,其特征在于,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及,每个进程在需要向所述内存映射文件中写入共享数据时,包括:
向系统获得所述内存映射文件的写锁,所述写锁不允许应用内的其他进程从写入所述共享数据的内存块读取数据或者向所述内存块写入数据;
向所述内存映射文件中写入所述共享数据;
在写入所述共享数据结束时,释放所述写锁。
2.如权利要求1所述的方法,其特征在于,所述内存映射文件中还存储有第一写指针,所述第一写指针用于指示共享数据在所述内存映射文件中的内存偏移量;以及
所述方法,还包括:
比较缓存的第二写指针和所述第一写指针;
如果所述第二写指针和所述第一写指针不一致,则从所述内存映射文件中读取所述第二写指针与所述第一写指针之间的共享数据并加载至缓存;
更新所述第二写指针为所述第一写指针。
3.如权利要求2所述的方法,其特征在于,在向所述内存映射文件中写入共享数据之后,还包括:
根据所述共享数据对应的内存偏移量,修改所述第一写指针和第二写指针。
4.如权利要求1所述的方法,其特征在于,所述内存映射文件中还存储有第一内存重整序列号;以及
所述方法,还包括:
比较缓存的第二内存重整序列号和所述第一内存重整序列号;
如果所述第二内存重整序列号与所述第一内存重整序列号不同,则将所述内存映射文件中存储的全部共享数据重新加载至缓存中。
5.如权利要求1所述的方法,其特征在于,在向系统获得写锁时,还包括:
如果获得写锁失败,则判断当前是否持有所述内存映射文件的读锁;
如果是,则释放所述读锁;
如果否,则等待应用内的其他进程释放所述内存映射文件的读锁。
6.如权利要求1所述的方法,其特征在于,在释放所述写锁之前,还包括:
判断在获得所述内存映射文件的写锁之前是否持有所述内存映射文件的读锁;
如果判断结果为是,则先获得所述内存映射文件的读锁之后再释放所述写锁。
7.权利要求1所述的方法,其特征在于,向所述内存映射文件中写入所述共享数据,包括:
按照写入共享数据的先后顺序,依次将所述共享数据插入到所述内存映射文件中。
8.如权利要求1所述的方法,其特征在于,所述共享数据包括键-键值对;以及
所述方法,还包括:
在更新所述内存映射文件中的任一键所对应的键值时,将新的键-键值插入到所述内存映射文件中。
9.如权利要求1~8任一权利要求所述的方法,其特征在于,每个进程在需要从所述内存映射文件读取共享数据时,还包括:
向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从读取共享数据的内存块读取数据,不允许应用内的其他进程向读取共享数据的内存块写入数据;
从所述内存映射文件中读取共享数据;
在读取共享数据结束后,释放获得的读锁。
10.如权利要求9所述的方法,其特征在于,共享数据包括键-键值对;以及
从所述内存映射文件中读取共享数据,具体包括:
针对任一键,如果在所述内存映射文件中存储有该键对应的多个键值,则读取内存偏移量最大的键值作为该键对应的键值。
11.一种数据访问方法,其特征在于,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及每个进程在需要从所述内存映射文件读取共享数据时,包括:
向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从所述第二区域读取数据,不允许应用内的其他进程向所述第二区域写入数据;
从所述内存映射文件中读取共享数据;
在读取共享数据结束后,释放获得的读锁。
12.一种数据访问装置,其特征在于,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;以及
所述装置,包括:
第一获得单元,用于在需要向所述内存映射文件中写入共享数据时,向系统获得所述内存映射文件的写锁,所述写锁不允许应用内的其他进程从写入所述共享数据的内存块读取数据或者向所述内存块写入数据;
数据写入单元,用于向所述内存映射文件中写入所述共享数据;
第一释放单元,用于在写入所述共享数据结束时,释放所述写锁。
13.一种数据访问装置,其特征在于,建立内存映射文件用于存储共享数据,所述内存映射文件为Android应用程序通过向Android操作系统申请内存空间建立的,Android应用程序内的所有进程共享向所述Android操作系统申请的内存空间;
所述装置,包括:
获得单元,用于在需要从内存映射文件读取共享数据时,向系统获得所述内存映射文件的读锁,所述读锁允许应用内的其他进程从所述第二区域读取数据,不允许应用内的其他进程向所述第二区域写入数据;
读取单元,用于从所述内存映射文件中读取共享数据;
释放单元,用于在读取共享数据结束后,释放获得的读锁。
14.一种计算装置,其特征在于,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1~11任一权利要求所述方法的步骤。
15.一种计算机可读介质,其特征在于,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行权利要求1~11任一权利要求所述方法的步骤。
CN201810975818.3A 2018-08-24 2018-08-24 一种数据访问方法、装置和存储介质 Active CN110399227B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810975818.3A CN110399227B (zh) 2018-08-24 2018-08-24 一种数据访问方法、装置和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810975818.3A CN110399227B (zh) 2018-08-24 2018-08-24 一种数据访问方法、装置和存储介质

Publications (2)

Publication Number Publication Date
CN110399227A true CN110399227A (zh) 2019-11-01
CN110399227B CN110399227B (zh) 2022-09-27

Family

ID=68322500

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810975818.3A Active CN110399227B (zh) 2018-08-24 2018-08-24 一种数据访问方法、装置和存储介质

Country Status (1)

Country Link
CN (1) CN110399227B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112346879A (zh) * 2020-11-06 2021-02-09 网易(杭州)网络有限公司 进程管理方法、装置、计算机设备及存储介质
CN114020481A (zh) * 2021-10-22 2022-02-08 山东浪潮科学研究院有限公司 一种防止多个进程访问同一任意波形发生器的方法
CN114840356A (zh) * 2022-07-06 2022-08-02 山东矩阵软件工程股份有限公司 一种数据处理方法、数据处理系统及相关装置
CN115061986A (zh) * 2022-08-17 2022-09-16 统信软件技术有限公司 数据写入方法、数据压缩方法及数据解压方法
CN116775571A (zh) * 2023-08-23 2023-09-19 北京昆迈医疗科技有限公司 一种数据管理系统
WO2024045643A1 (zh) * 2022-08-31 2024-03-07 华为技术有限公司 数据访问设备、方法、系统、数据处理单元及网卡

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060206538A1 (en) * 2005-03-09 2006-09-14 Veazey Judson E System for performing log writes in a database management system
CN101055584A (zh) * 2007-05-17 2007-10-17 华为技术有限公司 数据库加锁、操作的方法及装置
US20120072692A1 (en) * 2010-09-22 2012-03-22 Gosukonda Naga Venkata Satya Sudhakar Data access management
CN103095686A (zh) * 2012-12-19 2013-05-08 华为技术有限公司 热点元数据访问控制方法和服务器
CN103294710A (zh) * 2012-02-28 2013-09-11 北京新媒传信科技有限公司 一种数据存取方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060206538A1 (en) * 2005-03-09 2006-09-14 Veazey Judson E System for performing log writes in a database management system
CN101055584A (zh) * 2007-05-17 2007-10-17 华为技术有限公司 数据库加锁、操作的方法及装置
US20120072692A1 (en) * 2010-09-22 2012-03-22 Gosukonda Naga Venkata Satya Sudhakar Data access management
CN103294710A (zh) * 2012-02-28 2013-09-11 北京新媒传信科技有限公司 一种数据存取方法和装置
CN103095686A (zh) * 2012-12-19 2013-05-08 华为技术有限公司 热点元数据访问控制方法和服务器

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112346879A (zh) * 2020-11-06 2021-02-09 网易(杭州)网络有限公司 进程管理方法、装置、计算机设备及存储介质
CN112346879B (zh) * 2020-11-06 2023-08-11 网易(杭州)网络有限公司 进程管理方法、装置、计算机设备及存储介质
CN114020481A (zh) * 2021-10-22 2022-02-08 山东浪潮科学研究院有限公司 一种防止多个进程访问同一任意波形发生器的方法
CN114840356A (zh) * 2022-07-06 2022-08-02 山东矩阵软件工程股份有限公司 一种数据处理方法、数据处理系统及相关装置
CN114840356B (zh) * 2022-07-06 2022-11-01 山东矩阵软件工程股份有限公司 一种数据处理方法、数据处理系统及相关装置
CN115061986A (zh) * 2022-08-17 2022-09-16 统信软件技术有限公司 数据写入方法、数据压缩方法及数据解压方法
CN115061986B (zh) * 2022-08-17 2022-12-02 统信软件技术有限公司 数据写入方法、数据压缩方法及数据解压方法
WO2024045643A1 (zh) * 2022-08-31 2024-03-07 华为技术有限公司 数据访问设备、方法、系统、数据处理单元及网卡
CN116775571A (zh) * 2023-08-23 2023-09-19 北京昆迈医疗科技有限公司 一种数据管理系统
CN116775571B (zh) * 2023-08-23 2023-11-07 北京昆迈医疗科技有限公司 一种数据管理系统

Also Published As

Publication number Publication date
CN110399227B (zh) 2022-09-27

Similar Documents

Publication Publication Date Title
CN110399227A (zh) 一种数据访问方法、装置和存储介质
US20080119178A1 (en) Allocating Compression-Based Firmware Over the Air
CN112035410B (zh) 日志存储方法、装置、节点设备及存储介质
CN110569130B (zh) 一种跨进程通信方法、装置及设备
CN110519401A (zh) 提高网络访问成功率的方法、装置、设备及存储介质
CN110275723A (zh) 获取资源的方法、装置、电子设备及可读介质
CN107408081A (zh) 提供对存储器的加强重放保护
CN105988846B (zh) 页面加载方法及页面加载装置
CN110209416A (zh) 应用软件更新方法、装置、终端及存储介质
CN109657174A (zh) 用于更新数据的方法和装置
KR101246360B1 (ko) 메모리 및 임시 메모리를 이용한 패치 방법 및 그를 이용한 패치 서버, 패치 클라이언트
US20180123791A1 (en) Highly available and reliable secret distribution infrastructure
CN110334531A (zh) 虚拟机密钥的管理方法、主节点、系统、存储介质及装置
US8478772B2 (en) On-device database service for mobile device
US11593169B2 (en) Memory deallocation across a trust boundary
CN113609167B (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质
CN109165712A (zh) 分布式分期号的生成方法、装置和计算机存储介质
CN107391539B (zh) 事务处理方法、服务器和存储介质
CN114443189A (zh) 一种图像处理方法和电子设备
CN108399076A (zh) 一种基于uefi的固件更新方法与装置
CN106294033A (zh) 一种多机房缓存同步功能的测试方法及装置
US6959309B2 (en) Interface between programming languages and method therefor
CN109684026A (zh) App皮肤更换方法、装置、电子设备及存储介质
CN115765998A (zh) 一种加密机集群迁移升级接入方法及装置
CN115203210A (zh) 哈希表处理方法、装置、设备及计算机可读存储介质

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
GR01 Patent grant
GR01 Patent grant