CN109656730B - 一种访问缓存的方法和装置 - Google Patents
一种访问缓存的方法和装置 Download PDFInfo
- Publication number
- CN109656730B CN109656730B CN201811564829.9A CN201811564829A CN109656730B CN 109656730 B CN109656730 B CN 109656730B CN 201811564829 A CN201811564829 A CN 201811564829A CN 109656730 B CN109656730 B CN 109656730B
- Authority
- CN
- China
- Prior art keywords
- cache block
- target
- target cache
- data
- locked state
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种访问缓存的方法和装置,将第一进程向第二进程提供数据的缓存区划分为多个缓存区块,当有目标进程对该缓存区发起访问请求时,从该缓存区的多个缓存区块中选取一目标缓存区块,判断该目标缓存区块是否处于锁定状态,如果该目标缓存区块处于锁定状态,则,无需一直等待该目标缓存区域切换为非锁定状态,而可以从其他的多个缓存区块中选取另一缓存区块作为目标缓存区块,返回执行“判断获取到的目标缓存区块是否处于锁定状态”,直到从多个缓存区块中查找到当前不处于锁定状态的目标缓存区块,实现了多个进程同时向同一缓存区的不同缓存区块分别进行访问,从而提高进程间的数据通信效率。
Description
技术领域
本发明涉及信息处理技术领域,特别是涉及一种访问缓存的方法和装置。
背景技术
目前,进程间的数据通信通常是通过共享的缓存区实现的。例如,当进程A需要向进程B提供数据时,进程A先将该数据存入两者共享的缓存区,然后进程B再从该缓冲区中取出该数据,从而完成两者间的数据通信。但由于该缓冲区是进程A与进程B共享的,两者对该缓冲区的访问可能会产生冲突。例如,在进程A向该缓存区存入数据的同时进程B从该缓存区取出数据,从而导致两个进程之间的数据通信出现错误。
为了避免这种访问冲突,当某进程访问该缓冲区时,该缓冲区的状态可以被设置成锁定状态,以使得该缓冲区在处于锁定状态时不会被其他进程访问。这样虽然能避免不同进程对同一缓冲区的访问冲突,但却会导致在缓冲区正在被访问的同时针对该缓冲区发起的其他访问必须要等待该缓冲区正在进行的访问结束之后才能进行,也就是说,不同进程对同一缓冲区发起的并发访问无法同时进行,因此,进程间的数据通信效率不高。
发明内容
本发明所要解决的技术问题是,提供一种访问缓存的方法和装置,以使得在进程间数据通信过程中不同进程对同一缓冲区的并发访问能够同时进行,从而提高进程间的数据通信效率。
第一方面,本发明实施例提供了一种访问缓存的方法,包括:
响应于目标进程对缓存区的访问请求,从多个缓存区块中选取一目标缓存区块;所述缓存区用于第一进程向第二进程提供数据,所述缓存区由所述多个缓存区块组成;
判断获取到的目标缓存区块是否处于锁定状态;
若所述目标缓存区域未处于锁定状态,将所述目标缓存区块从非锁定状态切换成锁定状态,在所述目标缓存区块已切换成锁定状态的情况下在所述目标缓存区块中执行所述访问请求对应的访问操作,并在所述访问操作执行完毕之后将所述目标缓存区块从锁定状态切换成非锁定状态;
若所述目标缓存区块处于锁定状态,从所述多个缓存区块中选取另一目标缓存区块,返回执行所述判断获取到的目标缓存区块是否处于锁定状态。
可选地,所述目标进程为所述第一进程;
所述访问操作具体为:在所述目标缓存区块满足可存入条件的情况下所述第一进程将目标数据存入到所述目标缓存区块;
其中,所述可存入条件为:所述目标缓存区块具有未存入数据的剩余存储空间。
可选地,所述可存入条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间未超过时间阈值。
可选地,所述目标进程为所述第二进程;
所述访问操作具体为:在所述目标缓存区块满足可取出条件的情况下所述第二进程从所述目标缓存区块中取出目标数据并将所述目标数据从所述目标缓存区块中删除;
其中,所述可取出条件为:所述目标缓存区块的存储空间已存入数据。
可选地,所述可取出条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间超过时间阈值。
可选地,所述目标缓存区块的存储空间大小对应于所述第一进程在一次写入操作中可写入所述缓存区的最大数据量。
第二方面,本发明实施例还提供了一种访问缓存的装置,包括:
第一选取单元,用于响应于目标进程对缓存区的访问请求,从多个缓存区块中选取一目标缓存区块;所述缓存区用于第一进程向第二进程提供数据,所述缓存区由所述多个缓存区块组成;
判断单元,用于判断获取到的目标缓存区块是否处于锁定状态;
执行单元,用于若所述目标缓存区域未处于锁定状态,将所述目标缓存区块从非锁定状态切换成锁定状态,在所述目标缓存区块已切换成锁定状态的情况下在所述目标缓存区块中执行所述访问请求对应的访问操作,并在所述访问操作执行完毕之后将所述目标缓存区块从锁定状态切换成非锁定状态;
第二选取单元,用于若所述目标缓存区块处于锁定状态,从所述多个缓存区块中选取另一目标缓存区块,返回执行所述判断获取到的目标缓存区块是否处于锁定状态。
可选地,所述目标进程为所述第一进程;
所述访问操作具体为:在所述目标缓存区块满足可存入条件的情况下所述第一进程将目标数据存入到所述目标缓存区块;
其中,所述可存入条件为:所述目标缓存区块具有未存入数据的剩余存储空间。
可选地,所述可存入条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间未超过时间阈值。
可选地,所述目标进程为所述第二进程;
所述访问操作具体为:在所述目标缓存区块满足可取出条件的情况下所述第二进程从所述目标缓存区块中取出目标数据并将所述目标数据从所述目标缓存区块中删除;
其中,所述可取出条件为:所述目标缓存区块的存储空间已存入数据。
可选地,所述可取出条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间超过时间阈值。
可选地,所述目标缓存区块的存储空间大小对应于所述第一进程在一次写入操作中可写入所述缓存区的最大数据量。
第三方面,本发明实施例还提供了一种访问缓存的设备,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行本发明第一方面提供的所述的方法。
第四方面,本发明实施例还提供了一种存储介质,所述存储介质用于存储程序代码,所述程序代码用于执行本发明第一方面提供的所述的方法。
与现有技术相比,本发明实施例具有以下优点:
在本发明实施例中,将第一进程向第二进程提供数据的缓存区划分为多个缓存区块,当有目标进程对该缓存区发起访问请求时,首先,可以从该缓存区的多个缓存区块中选取一目标缓存区块,然后,判断获取到的目标缓存区块是否处于锁定状态,如果不处于,则将选中的该目标缓存区块从非锁定状态切换成锁定状态,在该目标缓存区块已切换成锁定状态的情况下在该目标缓存区块中执行访问请求对应的访问操作,并在该访问操作执行完毕之后将该目标缓存区块从锁定状态切换成非锁定状态;如果该目标缓存区块处于锁定状态,则,无需一直等待该目标缓存区域切换为非锁定状态,而可以从其他的多个缓存区块中选取另一缓存区块作为目标缓存区块,返回执行“判断获取到的目标缓存区块是否处于锁定状态”,直到从多个缓存区块中查找到当前不处于锁定状态的目标缓存区块,实现了多个进程同时向同一缓存区的不同缓存区块分别进行访问。这样,避免了访问缓存区需要等待该缓存区正在进行的访问结束之后才能进行,导致进程间的数据通信效率低下的问题,通过将缓存区划分为不同的缓存区块,不同进程可以对同一缓冲区的不同缓存区块同时进行访问,从而提高进程间的数据通信效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种访问缓存的方法的流程示意图;
图2为本发明实施例提供的一实例中的缓存区的结构示意图;
图3为本发明实施例提供的一种访问缓存的方法的一实例的流程示意图;
图4为本发明实施例提供的一种访问缓存的方法的另一实例的流程示意图;
图5为本发明实施例提供的一种访问缓存的装置的结构示意图;
图6为本发明实施例提供的一种访问缓存的设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,当共享的缓存区实现进程间的数据通信时,为了避免向该缓存区提供数据的进程和从该缓存区读取数据的进程之间发生访问冲突,导致数据通信出错,通常会在正在被进程访问的缓存区锁定。锁定缓存区的实现方式例如可以是:当进程A访问缓冲区时,该缓冲区的状态可以被设置成锁定状态,这样,由于该缓存区处于锁定状态,即使进程B发起访问该缓存区的访问请求,也不会即刻响应该进程B的访问请求,需要等待到进程A的访问结束后才响应该进程B的访问请求。这样,虽然能避免不同进程对同一缓冲区的访问冲突,但却会导致缓冲区在同一时间段内只能处理一个进程的一个访问请求,其他的进程只能等待该正在处理的访问结束,如此,缓存区实现进程间的数据通信的效率低下,难以满足需求。
基于此,为了解决上述问题,本发明实施例提供了一种访问缓存的方法,将第一进程向第二进程提供数据的缓存区划分为多个缓存区块,当有目标进程对该缓存区发起访问请求时,首先,可以从该缓存区的多个缓存区块中选取一目标缓存区块,然后,判断获取到的目标缓存区块是否处于锁定状态,如果不处于,则将选中的该目标缓存区块从非锁定状态切换成锁定状态,在该目标缓存区块已切换成锁定状态的情况下在该目标缓存区块中执行访问请求对应的访问操作,并在该访问操作执行完毕之后将该目标缓存区块从锁定状态切换成非锁定状态;如果该目标缓存区块处于锁定状态,则,无需一直等待该目标缓存区域切换为非锁定状态,而可以从其他的多个缓存区块中选取另一缓存区块作为目标缓存区块,返回执行“判断获取到的目标缓存区块是否处于锁定状态”,直到从多个缓存区块中查找到当前不处于锁定状态的目标缓存区块,实现了多个进程同时向同一缓存区的不同缓存区块分别进行访问。
这样,避免了访问缓存区需要等待该缓存区正在进行的访问结束之后才能进行,导致进程间的数据通信效率低下的问题,通过将缓存区划分为不同的缓存区块,不同进程可以对同一缓冲区的不同缓存区块同时进行访问,从而提高进程间的数据通信效率。
下面结合附图,详细说明本发明实施例中的各种非限制性实施方式。
参见图1,为本发明实施例提供的一种访问缓存的方法的流程示意图。在本实施例中,该方法具体可以包括下述步骤101~步骤104:
步骤101,响应于目标进程对缓存区的访问请求,从多个缓存区块中选取一目标缓存区块;该缓存区用于第一进程向第二进程提供数据,该缓存区由多个缓存区块组成。
可以理解的是,缓存区,是进程间数据通信的媒介,目标进程可以在缓存区中存入数据和/或取出数据。其中,向缓存区存入数据的目标进程可以记作第一进程;从缓存区取出数据的目标进程可以记作第二进程,这样,缓存区可以视作第一进程向第二进程提供数据的中间区。
对于缓存区而言,为了可以支持多进程并行访问,可以将缓存区划分为多个缓存区块,每个缓存区块的存储空间大小可以不同,也可以相同,具体可以根据实际需要进行灵活的设置。
作为一个示例,可以将第一进程在一次写入操作中可写入缓存区的最大数据量,作为设置每个缓存区块的存储空间大小的依据。一种情况下,可以直接将第一进程在一次写入操作中可写入缓存区的最大数据量,作为一个缓存区块的存储空间大小来划分缓存区,这样,得到的每个缓存区块的存储空间的大小均相同,等于第一进程在一次写入操作中可写入缓存区的最大数据量;另一种情况下,也可以按照第一进程在一次写入操作中可写入缓存区的最大数据量的倍数作为缓存区块的存储空间大小,这样,可以得到存储空间大小不一的缓存区块,如:缓存区块1的存储空间大小为第一进程在一次写入操作中可写入缓存区的最大数据量的2倍、缓存区块2的存储空间大小为第一进程在一次写入操作中可写入缓存区的最大数据量的3倍,也可以得到存储空间大小一致的缓存区块,如:缓存区块的存储空间大小均为第一进程在一次写入操作中可写入缓存区的最大数据量的N倍(N可以是预先设置的正整数)。需要说明的是,该缓存区块的存储空间大小还可以是对应于第一进程在一次写入操作中可写入缓存区的最大数据量的其他划分方式,在本实施例中不作具体限定。
作为另一个示例,也可以按照缓存区的总存储空间大小,以及预设的缓存区块数目,作为设置每个缓存区块的存储空间大小的依据。例如:假设缓存区的总存储空间大小为:16GB,预设的缓存区块数目为16,那么,可以将整个缓存区划分为16个缓存区块,每个缓存区块的存储空间大小为1GB。需要说明的是,也可以按照其他的方式将缓存区划分为多个缓存区块。
可以理解的是,缓存区划分为多个缓存区块后,该多个缓存区块可以组成一个环形链,作为队列的形式被依次访问。
访问请求,是目标进程向缓存区发起的、用于请求访问该缓存区的指令,作为一个示例,当目标进程为第一进程时,该访问请求用于请求将目标数据存入到缓存区,其中,目标数据可以携带于该访问请求中的。作为另一个示例,当目标进程为第二进程时,该访问请求用于请求从缓存区中取出目标数据,其中,该访问请求中可以携带该目标数据的标识,例如:该目标数据在该缓存区中的地址。
具体实现时,当有目标进程发起对该缓存区的访问请求时,作为响应,需要从该缓存区的多个缓存区块中选取其中的一个缓存区块,作为目标缓存区块,作为目标进程待访问的缓存区块,用于被存入或者取出目标数据。可以理解的是,从多个缓存区块中选取目标缓存区块的方式,可以是随机选取的,也可以是遵循预设的访问规则而选取的,在此不做具体限定。
步骤102,判断获取到的目标缓存区块是否处于锁定状态,若否,则执行步骤103;若是,执行步骤104。
可以理解的是,为了避免缓存区的多个缓存区块中发生进程访问冲突,可以为每个缓存区块设置对应的进程锁,进程锁可以被设置为锁定状态和非锁定状态。其中,如果缓存区块的进程锁被设置为锁定状态,那么,认为该缓存区块当前正在被访问,不可以作为目标缓存区块响应当前接收到的目标进程的访问请求;如果缓存区块的进程锁处于非锁定状态,那么,认为该缓存区块当前没有被任何进程访问,可以作为目标缓存区块响应当前接收到的目标进程的访问请求。
具体实现时,为了避免步骤101中选取的目标缓存区块出现访问冲突,可以在进行访问之前,读取该目标缓存区块的进程锁的状态,并判断该进程锁的状态是否为锁定状态,如果不是,表示该目标缓存区当前没有被其他进程占用,那么,可以执行下述步骤103以实现步骤101中的访问请求;如果该目标缓存区块的进程锁的状态为锁定状态,表示该目标缓存取悦当前正在被其他进程访问,无法执行步骤101中的访问请求对应的访问操作,那么,需要继续选取缓存区块直到选到未被占用的缓存区块作为目标缓存区块,以完成该次访问请求。
需要说明的是,将缓存区划分为多个缓存区块,且为每个缓存区块设置对应的进程锁,不仅解决了进程间访问冲突的问题,而且提供了一种有效的并行访问方式,解决了不同进程对同一缓冲区无法同时进行并发访问的问题,提高了进程间的数据通信效率。
步骤103,将所述目标缓存区块从非锁定状态切换成锁定状态,在所述目标缓存区块已切换成锁定状态的情况下在所述目标缓存区块中执行所述访问请求对应的访问操作,并在所述访问操作执行完毕之后将所述目标缓存区块从锁定状态切换成非锁定状态。
可以理解的是,当步骤102判定该步骤101中选定的目标缓存区块处于非锁定状态,那么,该目标缓存区块即可作为步骤101中的访问请求所要访问的对象。
具体实现时,首先,为了占用该目标缓存区块,避免后续其他进程影响该目标进程的访问,可以先将该目标缓存区块的进程锁的状态设置为锁定状态;然后,在锁定状态下的该目标缓存区块中执行访问请求对应的访问操作,例如:将目标进程中产生并携带于该访问请求中的目标数据存入到该目标缓存区块中;又例如:将存储于该目标缓存区块中的、访问请求中携带的目标数据的标识对应的目标数据,从目标缓存区块中取出,并将该目标数据从目标缓存区块中删除;接着,在该目标缓存区块中执行完该访问操作后,为了不影响其他进程的访问,可以将该目标缓存区块的进程锁的状态设置为非锁定状态,以表示目标进程的该次访问请求执行完毕。
可以理解的是,为了确保在该目标缓存区块中更加准确和有效的执行访问操作,还可以在目标缓存区块的进程锁处于锁定状态下,进一步判断该目标缓存区块是否满足访问操作的执行条件,只有满足了访问操作的执行条件时,才执行步骤103中的“在目标缓存区块中执行访问请求对应的访问操作,并在该访问操作执行完毕之后将目标缓存区块从锁定状态切换成非锁定状态”的操作;如果不满足执行条件,则可以将该目标缓存区块设置为非锁定状态,并执行步骤104,选择另一个目标缓存区域执行步骤102~步骤103的操作。
在一些可能的实现方式中,当目标进程为第一进程时,该访问请求对应的访问操作具体可以是:在目标缓存区块满足可存入条件的情况下第一进程将目标数据存入到目标缓存区块;其中,该可存入条件可以是:该目标缓存区块具有未存入数据的剩余存储空间。
具体实现时,将该目标缓存区块的进程锁切换为锁定状态后,当解析确定目标进程为第一进程时,可以先判断该目标缓存区块是否有未存入数据的空闲的剩余存储空间,如果有,则表示还可以在该目标缓存区块中存入数据,那么,第一进程将目标数据存入到该目标缓存区域的剩余存储空间中,并在存入完成后,将该目标缓存区块的进程锁切换为非锁定状态,以标识该次访问请求的完成;如果该目标缓存区块不存在剩余存储空间,则表示该目标缓存区块已经被写满,等待第二进程从中读取数据,此时,第一进程可以将该目标缓存区块的进程锁切换为非锁定状态,并执行步骤104,轮询查找下一个非锁定状态且满足可存入条件的目标缓存区块以执行该访问操作。
作为一个示例,在目标进程为第一进程时,可存入条件可以包括:目标缓存区块未存入数据,即,目标缓存区块是完全空闲的一块存储空间,那么,可以直接将目标数据存入到该目标缓存区块。需要说明的是,如果缓存区块的存储空间大小为第一进程在一次写入操作中可写入缓存区的最大数据量,那么,需要目标缓存区块未存入任何数据的情况下,才可以确保该次将目标数据成功的写入到目标缓存区块。
作为另一个示例,在目标进程为第一进程时,该可存入条件还可以包括:目标缓存区块的部分存储空间存入数据且最近一次在目标缓存区块中存入数据的时间未超过时间阈值。可以理解的是,考虑到进程间的数据通信效率,引入时间限制,即,预先设置了时间阈值(例如:1分钟),一旦最近一次在缓存区块存入数据的时间超过了该时间阈值,第二进程就将该缓存区块中当前存入的数据读取出来,释放这些数据对该缓存区块的非正常占用,提高数据通信效率。
具体实现时,如果判定该目标缓存区块的部分存储空间存入数据(即部分存储空间空闲)且最近一次在目标缓存区块中存入数据的时间还没有超过预设的时间阈值,那么,认为满足了可存入条件,可以直接将目标数据存入到该目标缓存区块;如果判定最近一次在目标缓存区块中存入数据的时间超过了预设的时间阈值,或者,判定该目标缓存区块的全部存储空间存入数据,那么,认为不满足该可存入条件,可以将该目标缓存区块的进程锁的状态设置为非锁定状态,并执行步骤104,轮询查找下一个非锁定状态且满足可存入条件的目标缓存区块以执行该访问操作。
在另一些可能的实现方式中,当目标进程为第二进程时,该访问请求对应的访问操作具体可以是:在目标缓存区块满足可取出条件的情况下,第二进程从目标缓存区块中取出目标数据并将该目标数据从目标缓存区块中删除;其中,该可取出条件为:目标缓存区块的存储空间已存入数据。
具体实现时,将该目标缓存区块的进程锁切换为锁定状态后,当解析确定目标进程为第二进程时,可以先判断该目标缓存区块的存储空间是否已存入数据,如果是,则表示可以从该目标缓存区块中读取第一进程存入的数据,那么,第二进程可以从目标缓存区块中取出目标数据,并将该目标数据从目标缓存区块中删除,在读取操作完成后,将该目标缓存区块的进程锁切换为非锁定状态,以标识该次访问请求的完成;如果该目标缓存区块还未存入任何数据,则表示该目标缓存区块当前还没有任何可以被第二进程读取的单元,此时,第二进程可以将该目标缓存区块的进程锁切换为非锁定状态,并执行步骤104,轮询查找下一个非锁定状态且满足可取出条件的目标缓存区块以执行该访问操作。
作为一个示例,在目标进程为第二进程时,该可取出条件可以包括:目标缓存区块的全部存储空间均已存入数据。即,目标缓存区块是完全被存满的存储空间,那么,可以直接将目标数据从该目标缓存区块中读取出来,并将读取出的给目标数据从该目标缓存区块中删除。需要说明的是,如果目标数据为该目标缓存区块中的所有数据,那么,执行该访问操作后,该目标缓存区块的存储空间完成被释放,即,该目标缓存区块将变为完全空闲的一块存储空间。
作为另一个示例,在目标进程为第二进程时,该可取出条件还可以包括:目标缓存区块的部分存储空间存入数据且最近一次在该目标缓存区块中存入数据的时间超过时间阈值。
具体实现时,如果判定该目标缓存区块的部分存储空间存入数据(即部分存储空间空闲)且最近一次在目标缓存区块中存入数据的时间超过了预设的时间阈值,那么,虽然还未完全将该目标缓存区块存满,为了数据通信效率,也认为满足了可取出条件,可以直接将目标数据从该目标缓存区块中读取出来,并将该目标数据从该目标缓存区块中删除;如果判定最近一次在目标缓存区块中存入数据的时间还未超过预设的时间阈值,或者,判定该目标缓存区块的全部存储空间均未存入数据,那么,认为不满足该可取出条件,可以将该目标缓存区块的进程锁的状态设置为非锁定状态,并执行步骤104,轮询查找下一个非锁定状态且满足可存入条件的目标缓存区块以执行该访问操作。
需要说明的是,无论目标进程为第一进程还是第二进程,均可以根据实际需求灵活的设置可执行访问操作的条件,以便实现进程间无冲突且高效的数据通信。
步骤104,从所述多个缓存区块中选取另一目标缓存区块,返回执行步骤102。
可以理解的是,当步骤102判定该步骤101中选定的目标缓存区块处于锁定状态,那么,认为该目标缓存区块当前正在被其他进程访问,不能作为该次访问的对象,为了提高数据通信效率,减少该访问请求的等待时间,可以从该多个缓存区块中选取另一目标缓存区块,返回执行步骤102,判断再次选取出的目标缓存区块是否满足执行该访问请求对应的访问操作的条件,如果仍然不满足,则可以再从该多个缓存区块中选取再一目标缓存区块,返回执行步骤102,判断该次选取出的目标缓存区块是否满足执行该访问请求对应的访问操作的条件;以此类推,直到选取出满足执行该访问请求对应的访问操作的条件的目标缓存区块,以执行步骤103,完成该次访问操作。
在介绍完本发明实施例提供的访问缓存的方法之后,为了让该访问缓存方法更加清楚,下面通过实例对上述方法进行更加具体的说明。
该场景中,如图2所示,缓存区100按照环形链的队列顺序依次包括:缓存区块110、缓存区块120、缓存区块130和缓存区块140。可存入条件为:目标缓存区块未存入数据;可取出条件为:目标缓存区块的部分存储空间存入数据且最近一次在该目标缓存区块中存入数据的时间超过时间阈值;其中,时间阈值为:1分钟。
参见图3,示出了在一个场景实例中的一种访问缓存的方法的流程示意图。该场景中,响应第一进程对缓存区域100的第一访问请求时,缓存区块110和缓存区块130为锁定状态,缓存区块120和缓存区块140为非锁定状态,且,第一访问请求对应的访问操作为将目标数据X存入到缓存区100中。该方法具体可以包括:
步骤301,响应于第一进程对缓存区100的第一访问请求,从多个缓存区块中选取缓存区块110作为目标缓存区块;
步骤302,判定获取到的目标缓存区块110处于锁定状态;
步骤303,从多个缓存区块中选取另一缓存区块120作为目标缓存区块;
步骤304,判定该目标缓存区域120处于非锁定状态,并将目标缓存区块120设置为锁定状态;
步骤305,判定该目标缓存区块120中未存入数据,符合可存入条件;
步骤306,在该目标缓存区块120中执行所述第一访问请求对应的访问操作,即,将目标数据X存入到该目标缓存区块120中;
步骤307,将目标缓存区块120从锁定状态切换成非锁定状态。
如此,快速和准确的完成了第一进程对缓存区100的第一访问请求对应的访问操作。
参见图4,示出了在该场景实例中的另一种访问缓存的方法的流程示意图。该场景中,在完成第一访问请求对应的访问操作后,响应第二进程对缓存区域100的第二访问请求时,缓存区块110和缓存区块140为锁定状态,缓存区块120和缓存区块130为非锁定状态,且,第二访问请求对应的访问操作为将目标数据Y从到缓存区100中取出。该方法具体可以包括:
步骤401,响应于第二进程对缓存区100的第二访问请求,从多个缓存区块中选取缓存区块140作为目标缓存区块;
步骤402,判定获取到的目标缓存区块140处于锁定状态;
步骤403,从多个缓存区块中选取另一缓存区块110作为目标缓存区块;
步骤404,判定获取到的目标缓存区块110处于锁定状态;
步骤405,从多个缓存区块中选取另一缓存区块120作为目标缓存区块;
步骤406,判定该目标缓存区域120处于非锁定状态,并将目标缓存区块120设置为锁定状态;
步骤407,判定该目标缓存区块120的部分存储空间存入数据(包括目标数据Y)且最近一次在该目标缓存区块中存入数据的时间超过了1分钟,符合可取出条件;
步骤408,在该目标缓存区块120中执行所述第二访问请求对应的访问操作,即,将目标数据Y从该目标缓存区块120中取出,并将目标数据Y从该目标缓存区块120中删除;
步骤409,将目标缓存区块120从锁定状态切换成非锁定状态。
如此,快速和准确的完成了第二进程对应缓存区100的第二访问请求对应的访问操作。
可见,通过本发明实施例,将第一进程向第二进程提供数据的缓存区划分为多个缓存区块,当有目标进程对该缓存区发起访问请求时,首先,可以从该缓存区的多个缓存区块中选取一目标缓存区块,然后,判断获取到的目标缓存区块是否处于锁定状态,如果不处于,则将选中的该目标缓存区块从非锁定状态切换成锁定状态,在该目标缓存区块已切换成锁定状态的情况下在该目标缓存区块中执行访问请求对应的访问操作,并在该访问操作执行完毕之后将该目标缓存区块从锁定状态切换成非锁定状态;如果该目标缓存区块处于锁定状态,则,无需一直等待该目标缓存区域切换为非锁定状态,而可以从其他的多个缓存区块中选取另一缓存区块作为目标缓存区块,返回执行“判断获取到的目标缓存区块是否处于锁定状态”,直到从多个缓存区块中查找到当前不处于锁定状态的目标缓存区块,实现了多个进程同时向同一缓存区的不同缓存区块分别进行访问。
这样,避免了访问缓存区需要等待该缓存区正在进行的访问结束之后才能进行,导致进程间的数据通信效率低下的问题,通过将缓存区划分为不同的缓存区块,不同进程可以对同一缓冲区的不同缓存区块同时进行访问,从而提高进程间的数据通信效率。
相应的,本发明实施例还提供了一种访问缓存的装置,如图5所示,该装置具体可以包括:
第一选取单元501,用于响应于目标进程对缓存区的访问请求,从多个缓存区块中选取一目标缓存区块;所述缓存区用于第一进程向第二进程提供数据,所述缓存区由所述多个缓存区块组成;
判断单元502,用于判断获取到的目标缓存区块是否处于锁定状态;
执行单元503,用于若所述目标缓存区域未处于锁定状态,将所述目标缓存区块从非锁定状态切换成锁定状态,在所述目标缓存区块已切换成锁定状态的情况下在所述目标缓存区块中执行所述访问请求对应的访问操作,并在所述访问操作执行完毕之后将所述目标缓存区块从锁定状态切换成非锁定状态;
第二选取单元504,用于若所述目标缓存区块处于锁定状态,从所述多个缓存区块中选取另一目标缓存区块,返回执行所述判断获取到的目标缓存区块是否处于锁定状态。
可选地,所述目标进程为所述第一进程;
所述访问操作具体为:在所述目标缓存区块满足可存入条件的情况下所述第一进程将目标数据存入到所述目标缓存区块;
其中,所述可存入条件为:所述目标缓存区块具有未存入数据的剩余存储空间。
可选地,所述可存入条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间未超过时间阈值。
可选地,所述目标进程为所述第二进程;
所述访问操作具体为:在所述目标缓存区块满足可取出条件的情况下所述第二进程从所述目标缓存区块中取出目标数据并将所述目标数据从所述目标缓存区块中删除;
其中,所述可取出条件为:所述目标缓存区块的存储空间已存入数据。
可选地,所述可取出条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间超过时间阈值。
可选地,所述目标缓存区块的存储空间大小对应于所述第一进程在一次写入操作中可写入所述缓存区的最大数据量。
上述描述为访问缓存的装置的相关描述,其中,具体实现方式以及达到的效果,可以参见上述访问缓存的方法实施例的描述,这里不再赘述。
此外,本发明实施例还提供了一种访问缓存的设备,如图6所示,该设备包括处理器601以及存储器602:
所述存储器602用于存储程序代码,并将所述程序代码传输给所述处理器601;
所述处理器601用于根据所述程序代码中的指令执行本发明实施例提供的访问缓存的方法。
该访问缓存的设备的具体实现方式以及达到的效果,可以参见上述访问缓存的方法实施例的描述,这里不再赘述。
此外,本发明实施例还提供了一种存储介质,所述存储介质用于存储程序代码,所述程序代码用于执行上述访问缓存的方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置和设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种访问缓存的方法,其特征在于,包括:
响应于目标进程对缓存区的访问请求,从多个缓存区块中选取一目标缓存区块;所述缓存区用于第一进程向第二进程提供数据,所述缓存区由所述多个缓存区块组成;
判断获取到的目标缓存区块是否处于锁定状态;
若所述目标缓存区块未处于锁定状态,将所述目标缓存区块从非锁定状态切换成锁定状态,在所述目标缓存区块已切换成锁定状态的情况下在所述目标缓存区块中执行所述访问请求对应的访问操作,并在所述访问操作执行完毕之后将所述目标缓存区块从锁定状态切换成非锁定状态;
若所述目标缓存区块处于锁定状态,从所述多个缓存区块中选取另一目标缓存区块,返回执行所述判断获取到的目标缓存区块是否处于锁定状态;
其中:
若所述目标进程为所述第一进程,则:
所述访问操作具体为:在所述目标缓存区块满足可存入条件的情况下所述第一进程将目标数据存入到所述目标缓存区块;
所述可存入条件为:所述目标缓存区块具有未存入数据的剩余存储空间,并且,所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间未超过时间阈值。
2.根据权利要求1所述的方法,其特征在于,若所述目标进程为所述第二进程;
所述访问操作具体为:在所述目标缓存区块满足可取出条件的情况下所述第二进程从所述目标缓存区块中取出目标数据并将所述目标数据从所述目标缓存区块中删除;
其中,所述可取出条件为:所述目标缓存区块的存储空间已存入数据。
3.根据权利要求2所述的方法,其特征在于,所述可取出条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间超过时间阈值。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述目标缓存区块的存储空间大小对应于所述第一进程在一次写入操作中可写入所述缓存区的最大数据量。
5.一种访问缓存的装置,其特征在于,包括:
第一选取单元,用于响应于目标进程对缓存区的访问请求,从多个缓存区块中选取一目标缓存区块;所述缓存区用于第一进程向第二进程提供数据,所述缓存区由所述多个缓存区块组成;
判断单元,用于判断获取到的目标缓存区块是否处于锁定状态;
执行单元,用于若所述目标缓存区块未处于锁定状态,将所述目标缓存区块从非锁定状态切换成锁定状态,在所述目标缓存区块已切换成锁定状态的情况下在所述目标缓存区块中执行所述访问请求对应的访问操作,并在所述访问操作执行完毕之后将所述目标缓存区块从锁定状态切换成非锁定状态;
第二选取单元,用于若所述目标缓存区块处于锁定状态,从所述多个缓存区块中选取另一目标缓存区块,返回执行所述判断获取到的目标缓存区块是否处于锁定状态;
其中:
若所述目标进程为所述第一进程,则:
所述访问操作具体为:在所述目标缓存区块满足可存入条件的情况下所述第一进程将目标数据存入到所述目标缓存区块;
其中,所述可存入条件为:所述目标缓存区块具有未存入数据的剩余存储空间;所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间未超过时间阈值。
6.根据权利要求5所述的装置,其特征在于,若所述目标进程为所述第二进程,则:
所述访问操作具体为:在所述目标缓存区块满足可取出条件的情况下所述第二进程从所述目标缓存区块中取出目标数据并将所述目标数据从所述目标缓存区块中删除;
所述可取出条件为:所述目标缓存区块的存储空间已存入数据。
7.根据权利要求6所述的装置,其特征在于,所述可取出条件包括:所述目标缓存区块的部分存储空间存入数据且最近一次在所述目标缓存区块中存入数据的时间超过时间阈值。
8.根据权利要求5至7任意一项所述的装置,其特征在于,所述目标缓存区块的存储空间大小对应于所述第一进程在一次写入操作中可写入所述缓存区的最大数据量。
9.一种访问缓存的设备,其特征在于,所述设备包括处理器以及存储器:
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求1至4任一项所述的方法。
10.一种存储介质,其特征在于,所述存储介质用于存储程序代码,所述程序代码用于执行权利要求1至4任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811564829.9A CN109656730B (zh) | 2018-12-20 | 2018-12-20 | 一种访问缓存的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811564829.9A CN109656730B (zh) | 2018-12-20 | 2018-12-20 | 一种访问缓存的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109656730A CN109656730A (zh) | 2019-04-19 |
CN109656730B true CN109656730B (zh) | 2021-02-23 |
Family
ID=66115943
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811564829.9A Active CN109656730B (zh) | 2018-12-20 | 2018-12-20 | 一种访问缓存的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109656730B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110995417B (zh) * | 2019-11-18 | 2022-12-27 | 北京电旗通讯技术股份有限公司 | 基于高频rfid芯片的通信物料的配置数据加密方法及介质 |
CN111882166B (zh) * | 2020-07-02 | 2024-04-05 | 广州惠侨计算机科技有限公司 | 一种生物标本管理方法、系统、设备及介质 |
CN111984197B (zh) * | 2020-08-24 | 2023-12-15 | 许昌学院 | 计算机缓存分配方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572568B (zh) * | 2013-10-15 | 2021-07-23 | 蚂蚁金服(杭州)网络技术有限公司 | 读锁操作方法、写锁操作方法及系统 |
CN106338931A (zh) * | 2015-07-06 | 2017-01-18 | 天津九洲云物联科技有限公司 | 中控信息调度算法 |
CN107704325B (zh) * | 2016-08-08 | 2021-08-27 | 北京百度网讯科技有限公司 | 用于进程间传输消息的方法和装置 |
CN108462682A (zh) * | 2017-02-22 | 2018-08-28 | 成都鼎桥通信技术有限公司 | 初始对话协议sip消息的分发方法和装置 |
-
2018
- 2018-12-20 CN CN201811564829.9A patent/CN109656730B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109656730A (zh) | 2019-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109656730B (zh) | 一种访问缓存的方法和装置 | |
RU2597520C2 (ru) | Контроллер памяти и способ работы такого контроллера памяти | |
CN101826107B (zh) | 哈希数据处理方法和装置 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
CN109634974A (zh) | 一种数据处理方法、系统及相关组件 | |
CN115454502B (zh) | 用于调度simt架构处理器的返回数据的方法及相应处理器 | |
CN110806942B (zh) | 数据处理的方法和装置 | |
CN109213423B (zh) | 基于地址屏障无锁处理并发io命令 | |
CN109992526A (zh) | 一种读写管理方法以及相关装置 | |
CN111857600B (zh) | 一种数据读写方法及装置 | |
CN110334034B (zh) | 映射表动态加载的方法、装置、计算机设备及存储介质 | |
CN116661690A (zh) | 记录内存状态的方法、装置、计算机设备及存储介质 | |
CN112068948B (zh) | 数据散列方法、可读存储介质和电子设备 | |
CN107203339B (zh) | 一种数据存储方法及装置 | |
US20090153308A1 (en) | Apparatus and method for managing user memory of rfid tag | |
CN115809150A (zh) | 一种分布式死锁检测方法、装置及电子设备 | |
CN114047954A (zh) | 一种基于寄存器的数据处理方法及装置 | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
CN108959517B (zh) | 文件管理方法、装置及电子设备 | |
CN109213424B (zh) | 并发io命令的无锁处理方法 | |
JP2004206369A (ja) | 共通資源へのアクセス方式及びアクセスプログラム | |
CN113760858A (zh) | 内存库数据动态迁移方法、装置、计算设备及存储设备 | |
CN110837411A (zh) | 一种数据服务器端分区内部并发i/o调度方法及系统 | |
JP4333749B2 (ja) | 演算システム,演算装置およびプログラム |
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 |