CN112882831A - 一种数据处理方法及装置 - Google Patents
一种数据处理方法及装置 Download PDFInfo
- Publication number
- CN112882831A CN112882831A CN202110155702.7A CN202110155702A CN112882831A CN 112882831 A CN112882831 A CN 112882831A CN 202110155702 A CN202110155702 A CN 202110155702A CN 112882831 A CN112882831 A CN 112882831A
- Authority
- CN
- China
- Prior art keywords
- memory block
- data
- written
- state
- time
- 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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
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 Transfer Systems (AREA)
Abstract
一种数据处理方法及装置,能够实现在多进程或多线程场景下对缓冲区的并行读写,提高了数据处理的效率。方法具体包括:接收到第一请求,所述第一请求用于请求申请缓冲区中的第一内存块;将所述第一内存块的状态设置为第一状态,所述第一状态用于表征所述第一内存块正在被写入数据或已被写入数据;将写指针指向所述缓冲区中的第二内存块,所述写指针用于指向所述缓冲区中当前可写入数据的内存块;接收待写入数据,将所述待写入数据写入到第一内存块中。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据处理方法及装置。
背景技术
远程异步通信(包含多线程间服务通信、跨进程间的消息通信、跨网络的数据收发通信以及缓存等)通常采用请求回复、消息队列或者缓存数据的形式。这种通信形式存在许多内存分配和释放操作,频繁的内存申请、分配以及释放不但增加了系统开销,更使得内存碎片不断增多,非常不利于系统长期稳定运行。为了解决该问题,用户会选择固定大小的内存空间反复使用,例如环形缓冲区。此外,远程异步通信也存在多线程或多进程共享内存的场景,这种场景下会有多个用户互斥访问同一个环形缓冲区,因此提高多线程或多进程场景下对环形缓冲区的使用效率对于提高远程异步通信质量至关重要。
发明内容
本发明实施例提供了一种数据处理方法及装置,能够实现在多线程或多进程场景下对缓冲区的并行读写,并提高数据处理的效率。
第一方面,本发明实施例提供一种数据处理方法,包括:
接收到第一请求,所述第一请求用于请求申请缓冲区中的第一内存块;
将所述第一内存块的状态设置为第一状态,所述第一状态用于表征所述第一内存块正在被写入数据或已被写入数据;
将写指针指向所述缓冲区中的第二内存块,所述写指针用于指向所述缓冲区中当前可写入数据的内存块;
接收待写入数据,将所述待写入数据写入到所述第一内存块中。
可选的,所述方法还包括:
在第一时刻之前,接收到第二请求,所述第二请求用于请求申请所述缓冲区中的所述第二内存块;所述第一时刻为所述第一内存块对应的待写入数据完全被写入到所述第一内存块的时刻;
将所述第二内存块的状态设置为所述第一状态;
将所述写指针指向所述缓冲区中的第三内存块。
可选的,所述方法还包括:
接收到数据读取请求;
确定在第一时刻所述第一内存块对应的待写入数据完全被写入到所述第一内存块,在第二时刻所述第二内存块对应的待写入数据完全被写入到所述第二内存块;
当所述第二时刻早于所述第一时刻时,将读指针指向所述第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据。
可选的,所述方法还包括:
将所述第二内存块的状态设置为第二状态,所述第二状态用于表征所述第二内存块正在被读取数据;
在第三时刻之前,将所述读指针指向所述第一内存块,以使数据读取装置基于所述读指针从所述第一内存块中读取数据,其中,所述第三时刻为读取所述第二内存块中的数据的完成时刻。
可选的,所述方法还包括:接收到数据读取请求;
将读指针指向所述第一内存块,以使数据读取装置基于所述读指针从所述第一内存块中读取数据。
将所述第一内存块的状态设置为第二状态,所述第二状态用于表征所述第一内存块正在被读取数据;
在第四时刻之前,将所述读指针指向第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据,所述第四时刻为读取所述第一内存块中的数据的完成时刻。
第二方面,本发明实施例提供一种数据处理装置,包括:
接收单元,用于接收到第一请求,所述第一请求用于请求申请缓冲区中的第一内存块;
处理单元,用于将所述第一内存块的状态设置为第一状态,所述第一状态用于表征所述第一内存块正在被写入数据或已被写入数据;
所述处理单元还用于将所述写指针指向所述缓冲区中的第二内存块,所述写指针用于指向所述缓冲区中当前可写入数据的内存块;
所述接收单元还用于接收待写入数据,所述处理单元还用于将所述待写入数据写入到所述第一内存块中。
可选的,所述接收单元还用于在第一时刻之前接收到第二请求,所述第二请求用于请求申请所述缓冲区中的所述第二内存块,所述第一时刻为所述第一内存块对应的待写入数据完全被写入到所述第一内存块的时刻;
所述处理单元还用于,将所述第二内存块的状态设置为所述第一状态;
所述处理单元还用于,将所述写指针指向所述缓冲区中的第三内存块。
可选的,所述接收单元还用于接收到数据读取请求;
所述处理单元还用于,确定在第一时刻所述第一内存块对应的待写入数据完全被写入到所述第一内存块,在第二时刻所述第二内存块对应的待写入数据完全被写入到所述第二内存块;
所述处理单元还用于,当所述第二时刻早于所述第一时刻时,将读指针指向所述第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据。
第三方面,本发明实施例提供一种数据处理装置,包括:
存储器,用于存储计算机指令;
处理器,与所述存储器连接,用于执行所述存储器中的计算机指令,以在执行所述计算机指令时执行如上述第一方面提供的方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述第一方面提供的方法。
第五方面,本发明实施例提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行如上述第一方面提供的方法。
本发明实施例提供了一种数据处理方法,在接收到申请缓冲区中的第一内存块的第一请求后,将第一内存块的状态设置为第一状态,写指针指向第二内存块,使得其他用户可以对第二内存块进行操作(比如在第二内存块中写入数据)。一般,在申请第一内存块后,在第一内存块中写入数据需要一定时长,本申请不需要等待第一内存块中数据完全写入后再将读指针移动到第二内存块,而是在申请第一内存块(即将第一内存块的状态设置为第一状态时)后立即将读指针移动到第二内存块。在读指针移动到第二内存块时,第一内存块中的数据还未写完,此时,第二内存块中的数据也可以写入,即第一内存块和第二内存块可以并行写入数据,实现在多线程或多进程场景下多个用户对环形缓冲区中多个内存块的并行读写,提高了数据处理的效率。
附图说明
图1为本发明实施例提供的一种数据处理方法对应的场景示意图;
图2为现有技术中的一种向环形缓冲区中写入数据的方法示意图;
图3为本发明实施例提供的一种数据处理方法的流程示意图;
图4为本发明实施例提供的一种向环形缓冲区中写入数据的方法示意图;
图5为本发明实施例提供的一种数据处理方法的具体流程示意图;
图6为本发明实施例提供的一种从环形缓冲区中读取数据的方法示意图;
图7为本发明实施例提供的另一种从环形缓冲区中读取数据的方法示意图;
图8为本发明实施例提供的一种数据处理装置的结构示意图;
图9为本发明实施例提供的另一种数据处理装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明技术方案的一部分实施例,而不是全部的实施例。基于本发明文件中记载的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明技术方案保护的范围。
一般,缓存区域有多种形式,比如环形缓存区域、条形缓存区域等等。以环形缓冲区为例,其存储空间在逻辑上首尾相连,在物理存储上是一维的长度固定的连续线性结构。环形缓冲区通常有一个读指针和一个写指针,读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针可以实现缓冲区数据的读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读用户或者写用户访问环形缓冲区,那么需要添加互斥保护机制来确保多个用户互斥访问环形缓冲区。
在互斥访问机制下,当多个用户中的一个用户在访问环形缓冲区时,该环形缓冲区对于其他用户是锁定状态,表明该环形缓冲区当前正用于处理一个用户请求以写数据或者读数据,如果此时再有其他用户请求写数据或读数据,则需要将当前的用户的请求处理完毕后才能继续处理其他用户的读写请求。通常情况下,用户的读写过程耗时相对较大,因此在互斥访问机制下用户对于环形缓冲区的利用率较低。
鉴于此,本发明实施例提供了一种数据处理方法,能够实现多个用户对环形缓冲区的并行读写,相对于上述互斥访问机制,不需要将当前用户的请求处理完毕便可以继续处理其他用户的读写请求,由此在很大程度上减小了用户读写数据的耗时,提高了在多个读用户或者写用户访问环形缓冲区的情境下对于环形缓冲区的使用效率。
下面结合说明书附图介绍本发明实施例提供的技术方案。
参考图1为本发明实施例提供的一种数据处理方法对应的场景示意图。
图1中包括终端设备中的一个环形缓冲区以及5个对环形缓冲区进行读写操作的用户。其中,用户1、用户2以及用户3申请将数据写入到环形缓冲区中,用户4以及用户5申请从环形缓冲区中读取数据。图1中是以环形缓冲区为例进行说明,在具体实施过程中,本发明中的方案也可以应用到任意具有互斥保护机制的其他类型的缓冲区中。此外,图1中环形缓冲区也可以是任意终端设备的内存空间中所指定的任意大小的存储空间,其中,终端设备可以是桌上型计算机、笔记本、掌上电脑、智能平板、移动终端以及云服务器等计算设备,本发明实施例不对此做任何限制。图1中是以多个用户访问环形缓冲区为例,在具体应用中,对环形缓冲区进行访问的也可以是程序运行中的多个线程,或者可以是多个应用进程,本发明实施例也不对此做任何限制。
需要注意的是,上文提及的场景仅是为了便于理解本发明的精神和原理而示出,本发明示例在此方面不受任何限制。相反,本发明实施例可以应用于适用的任何场景。
为了更好地说明本发明所提供的技术方案,下文中的实施例全部以上述图1中所述的场景为基础进行说明。首先,图2为现有技术中的一种向环形缓冲区中写入数据的方法示意图。
如图2所示,在步骤一中,写指针204最开始指向内存块201。当用户1、用户2以及用户3依次申请向环形缓冲区中写入数据时,在互斥访问机制下,用户1首先申请向环形缓冲区中写入数据,于是写指针204所指向的内存块201的使用权被分配给用户1,使得用户1能够向内存块201中写入数据。如步骤二中所示,当用户1写入数据完毕后(步骤二中的内存块201变为黑色代表数据写入完毕),写指针指向内存块202。然后,在步骤三中,终端设备响应于用户2的写入数据的请求,将写指针201所指向的内存块202分配给用户2。步骤四中,用户2向内存块202中写入数据完毕后,写指针指向内存块203,然后用户3才能够申请内存块203并向其中写入数据。按照这种现有技术中写入数据的方式,若用户1将对应的数据写入到相应的内存块201中耗时为2分钟,用户2将对应的数据写入到相应的内存块中202耗时为1分钟,用户3将对应的数据写入到相应的内存块中203耗时为3分钟,则上述3个用户写入数据一共耗时至少为2+1+3=6分钟。由此可见,写入或者读取数据的耗时导致环形缓冲区的使用效率较低。
为了解决现有技术中存在的不足,本发明实施例提供了一种数据处理方法,其具体流程如图3所示,包括以下步骤:
步骤301:接收到第一请求。其中,该第一请求用于请求申请缓冲区中的第一内存块。
若用户要向环形缓冲区中写入数据,则用户首先需要在环形缓冲区中申请一个固定大小内存块,该内存块的容量需大于或等于待写入数据的大小。用户向终端设备申请第一内存块后,终端设备响应于用户的请求,将第一内存块的使用权交给相应用户,则该用户可以对第一内存块进行任意读写操作。
例如图4中的步骤1中所示,终端设备接收到用户1的第一请求后,将环形缓冲区中的内存块401的使用权分配给用户1,由此用户1可以对内存块401进行任意的读写操作。
步骤302:将第一内存块的状态设置为第一状态,该第一状态用于表征第一内存块正在被写入数据或已被写入数据。
终端设备将第一内存块的使用权交给用户后,便可以将第一内存块的状态设置为第一状态。第一状态可用于表征该第一内存块正在被用户写入数据,或者,第一状态也可以用于表征该第一内存块已经被写入数据。
步骤303:将写指针指向缓冲区中的第二内存块。其中,写指针用于指向缓冲区中当前可写入数据的内存块。
步骤304:接收待写入数据,将待写入数据写入到第一内存块中。
可选的,若在第一时刻之前接收到第二请求,其中,第二请求用于请求申请所述缓冲区中的所述第二内存块,则将第二内存块的状态设置为第一状态,其中,第一时刻为所述第一内存块对应的待写入数据完全被写入到所述第一内存块的时刻。最后将写指针指向缓冲区中的第三内存块。
例如图4所示,终端设备在环形缓冲区中设置有写指针404、头指针405以及尾指针406,其中写指针用于指向环形缓冲区中可写入数据的内存块,头指针用于指向第一个被申请写入数据的内存块,尾指针用于指向最后一个被申请写入数据的内存块。在未写入数据时,头指针405、尾指针406以及写指针404指向环形缓冲区中的同一位置处。如步骤1中所示,当内存块401的使用权被分配给用户1后(步骤1中内存块401离开原位表示使用权被分配或被占用),内存块401的状态便被设置为第一状态,在第一状态下,除用户1之外的其他用户不能够对内存块1进行申请,也不能够对内存块401进行数据的写入或读取操作,同时,第一状态也表征内存块401正在被写入数据。在终端设备将内存块401的状态设置为第一状态后,指针404指向内存块401的下一个可被写入数据的内存块,头指针405指向第一被申请的内存块(即内存块401),尾指针指向内存块401的最后一个内存单元。
若在用户1对应的数据被完全被写入到内存块401之前,终端设备接收到用户2申请写入数据的第二请求,则在将内存块401的状态设置为第一状态之后,用户2便可以对写指针所指向的内存块402进行申请,如步骤2中所示,终端设备将内存块402的状态设置为第一状态,以表明内存块402被用户2占有并用于进行数据的写入。终端设备在将内存块402设置为第一状态后,继续将写指针404指向内存块402的下一个可被写入数据的内存块,头指针405指向内存块401,尾指针指向内存块402的最后一个内存单元,具体如图4中步骤2所示。
同理,在用户2对应的数据被完全写入到内存块402之前,用户3便可以对写指针404所指向的下一个可被写入数据的内存块进行申请并写入数据。如步骤3中所示,终端设备将内存块403的状态设置为第一状态,表明内存块403正在被用户3写入数据,此时写指针404指向内存块403的下一个可被写入数据的内存块,头指针405指向内存块401,尾指针指向内存块403的最后一个内存单元。
终端设备对内存块的状态进行设置的速度较快,可以忽略不计。若用户1、用户2以及用户3申请内存块的时间间隔较小,且用户1将数据完全写入到内存块401中需要2分钟,用户2将数据完全写入到内存块402中需要1分钟,用户3将数据完全写入到内存块403中需要3分钟,则如步骤4-6所示,在终端设备接收到用户1的写入数据请求后的第一分钟,内存块402被完全写入数据并被解除占用(步骤4中内存块402变为暗色表示被完全写入数据,内存块回归原位表示被解除占用),在第二分钟,内存块401被完全写入数据并被解除占用,在第三分钟,内存块403被完全写入数据并被解除占用。上述3个用户将数据块写入到相应内存块中一共耗时为3分钟。与上文图2中利用现有技术进行数据处理所需的时长(6分钟)相比较,利用本发明实施例中提供的方法进行环形缓冲区中数据的并行写入,在很大程度上节省了数据写入所需的时长,提高了数据处理的效率。
上文中已经阐述了如何利用本发明实施例中提供的数据处理方法将多个用户对应的数据块并行写入到环形缓冲区中,在具体实施过程中,存在多个用户申请将数据写入到环形缓冲区中并同时有多个用户申请从环形缓冲区中读取数据的情形。下面以图5为例,对本发明实施例提供的一种数据处理方法进行具体说明,如图所述,具体包括如下步骤:
步骤501:环形缓冲区初始化。
终端设备对获取的环形缓冲区需要进行初始化处理,具体地,终端设备可以在环形缓冲区头部放置头节点以记录环形缓冲区的信息,该信息包括缓冲区大小信息,写入数据或者读取数据的状态记录等,在初始化过程中也可以在环形缓冲区中放置头指针、尾指针、写指针以及读指针。
在初始化过程中,终端设备也可以设置环形缓冲区支持/不支持覆盖写,若设置环形缓冲区支持覆盖写,则当该环形缓冲区中的内存空间被写满后,最新写入的数据可以覆盖最先写入的数据;与之相反,若终端设备设置环形缓冲区不支持覆盖写,则当该环形缓冲区中的内存空间被写满后,无法被写入新的数据。
初始化完毕后,终端设备便等待其他用户对环形缓冲区的读取或写入请求。
当有用户申请对环形缓冲区进行数据写入时,执行步骤5010:接受到数据写入请求。
步骤5011:判断头指针和尾指针之间是否有空闲内存,若否,则执行步骤5012,否则执行步骤5013.
步骤5012:分配尾部内存块。
步骤5013:分配间隙内存块。
当有用户申请对环形缓冲区进行数据的写入时,可以按照如上述图3中所述的方法进行数据的写入,在此不再赘述。需要说明的是,当用户A申请写入数据时,可以先判断头指针和尾指针之间是否存在空闲的、未写入数据且未被其他用户占用的内存块,其中,头指针用于指向第一个被申请写入数据的内存块,尾指针用于指向最后一个被申请写入数据的内存块。
以图6为例,图中步骤a对应的环形缓冲区中,头指针604和尾指针605之间的内存块601、内存块602以及内存块603都已经被写入数据,可见,此时头指针与尾指针之间不存在空闲内存,因此当有用户申请写入数据时,需要分配尾部的内存块,即内存块603之后的内存块。
与之相对应,当环形缓冲区中头指针604和尾指针605之间的内存块被释放后(例如图6中步骤d对应的环形缓冲区中,内存块602已经被释放,成为空闲内存块),此时当有用户申请写入数据时,便可以分配中间的空闲内存602。
还有一种可能的情况为,环形缓冲区中头指针和尾指针之间存在空闲内存块,但是该空闲内存块的大小不足以写入新的数据。因此,可选的,可以先将待写入数据的大小与头尾指针之间的空闲内存块的大小进行比较,当待写入数据的大小小于头尾指针之间的空闲内存块时,可以将所述待写入数据写入到头尾指针之间的空闲内存块中;当待写入数据的大小大于头尾指针之间的空闲内存块时,可以将所述待写入数据写入到尾指针之后的空闲内存块中。
例如图6的步骤d中存在空闲内存块602,当待写入数据的大小小于内存块602的容量时,可以将待写入数据写入到内存块602中,或者也可以如步骤e中所示,将待写入数据写入到新申请的内存块607中;当待写入数据块的大小大于头尾指针之间的空闲内存块时,则可以如步骤f中所示将尾部的内存块608分配给对应的用户用于写入待写入数据。
步骤5014:写指针指向下一内存块。
终端设备给用户分配内存块后,便将写指针指向该内存块的下一个可被写入数据的内存块,以使其他用户可以继续进行数据的写入。
步骤5015:写入数据。终端设备为用户分配相应内存块后,用户可以进行数据的写入,在此期间,其他用户可以继续对环形缓冲区中的其他内存块进行申请并进行数据的写入。
步骤5016:确定数据写入完毕。
步骤5017:将内存块状态更新为已写入数据。
当用户将数据完全写入到对应的内存块中后,终端设备可以根据该内存块的相应状态标志位确定出对应的数据已经写入完毕,然后将该内存块的状态更新为已写入数据,并解除该用户对该内存块的占用,使得其他用户可以对该内存块进行读取操作。
与上述步骤5010相对应,当用户申请从缓冲区中读取数据时,执行步骤5020:接收到数据读取请求。
一种情况下,当终端设备接收到用户的数据读取请求后,可以按照先写完先读取的顺序进行内存块中数据的读取。具体的,在接收到数据读取请求后,终端设备确定在第一时刻第一内存块对应的待写入数据完全被写入到所述第一内存块,且在第二时刻第二内存块对应的待写入数据完全被写入到所述第二内存块;当所述第二时刻早于所述第一时刻时,终端设备将读指针指向第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据。
若终端设备接收到的是多个用户的数据读取请求,与图3中所述的将数据并行写入内存块的方法相类似,也可以采取并行读取的方式:终端设备将上述第二内存块的状态设置为第二状态,所述第二状态用于表征所述第二内存块正在被读取数据,并在第三时刻之前,将读指针指向第一内存块,以使数据读取装置基于所述读指针从所述第一内存块中读取数据,其中,所述第三时刻为读取所述第二内存块中的数据的完成时刻。
以图6为例,如图6中步骤a中所示,环形缓冲区中存在三个已经被写入数据的内存块601、内存块602以及内存块603,其中内存块601、内存块602以及内存块603开始写入数据的时刻相近,内存块602写入数据所需时长为1分钟,内存块601写入数据所需时长为2分钟,内存块603写入数据所需时长为3分钟,则内存块602对应的待写入数据完全被写入到内存块602中的时刻最早,而内存块603对应的待写入数据完全被写入到内存块603中的时刻最迟。环形缓冲区中还存在头指针604指向最先申请的内存块601,存在尾指针指605向最新申请的内存块603,并且存在读指针606指向最先完成数据写入的内存块602。
若存在用户4以及用户5先后申请读取环形缓冲区内存块中的数据,则终端设备基于用户4的数据读取请求,将内存块602的使用权分配给用户4,且内存块602的状态被设置为第二状态,在第二状态下,除用户4之外的其他用户不能够对内存块602进行操作,同时,第二状态表征内存块602正在被用户4占有并进行数据的读取。终端设备在将内存块602设置为第二状态后,在用户4完全读取内存块602中的数据之前,便可以将读指针指向第二个被完全写入数据的内存块601,然后基于用户5的数据读取请求,将内存块601的使用权分配给用户5,使得用户5可以与用户4并行进行内存块中数据的读取,提高了多个用户读取内存块中数据的效率。
另一种情况下,当终端设备接收到用户A的数据读取请求后,可以按照先申请先读取的顺序进行内存块中数据的读取。具体的,由于上述第一内存块为最先被申请的内存块,则在接收到数据读取请求后,终端设备将读指针指向第一内存块,以使数据读取装置基于所述读指针从所述第一内存块中读取数据。
若终端设备接收到的是多个用户的数据读取请求,与图3中所述的将数据并行写入内存块的方法相类似,也可以采取并行读取的方式:终端设备将第一内存块的状态设置为第二状态,所述第二状态用于表征所述第一内存块正在被读取数据,并在第四时刻之前,将读指针指向第二内存块,以使数据读取装置基于所述读指针从第二内存块中读取数据,所述第四时刻为读取所述第一内存块中的数据的完成时刻。
以图7为例,如图7中步骤A所示,环形缓冲区中存在三个已经被写入数据的内存块701、内存块702以及内存块703,其中,内存块701最先被申请写入数据,其次是内存块702,最后是内存块703被申请写入数据。环形缓冲区中还存在头指针704指向最先申请的内存块701,存在尾指针指705向最新申请的内存块703,并且存在读指针706指向最先被申请的内存块701。
若存在用户4以及用户5先后申请读取环形缓冲区内存块中的数据,则终端设备基于用户4的数据读取请求,将内存块701的使用权分配给用户4,然后内存块701的状态被设置为第二状态,在第二状态下,除用户4之外的其他用户不能够对内存块701进行操作,同时,第二状态表征内存块701正在被用户4占有并进行数据的读取。终端设备在将内存块701设置为第二状态后,在用户4完全读取内存块701中的数据之前,便可以将读指针指向第二个被申请写入数据的内存块702,然后基于用户5的数据读取请求,将内存块702的使用权分配给用户5,使得用户5可以与用户4并行进行内存块中数据的读取,提高了多个用户读取内存块中数据的效率。
利用上述方法执行完步骤5020之后,继续执行步骤5021:读指针指向下一内存块。
终端设备给用户A分配内存块后,便将读指针指向该内存块的下一个可被读取数据的内存块,以使其他用户可以继续进行数据的读取。
步骤5022:读取数据。终端设备给用户A分配内存块后,用户A可以进行数据的读取,在此期间,其他用户可以继续申请内存块进行数据读取。
步骤5023:确定数据读取完毕。
步骤5024:将内存块状态更新为空闲状态。
当用户A完全读取完对应的内存块中的数据后,解除用户A对该内存块的占用,并清空内存块中的数据,将该内存块的状态更新为空闲状态,使得其他用户可以重新对该内存块进行数据的写入。
基于同一发明构思,本发明实施例提供了一种数据处理装置,该数据处理装置能够实现前述的数据处理方法对应的功能。该数据处理装置可以是硬件结构、软件模块、或硬件结构加软件模块。该数据处理装置可以由芯片系统实现,芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。请参见图8,该装置包括:
接收单元801,用于接收到第一请求,所述第一请求用于请求申请缓冲区中的第一内存块;
处理单元802,用于将所述第一内存块的状态设置为第一状态,所述第一状态用于表征所述第一内存块正在被写入数据或已被写入数据;
所述处理单元802还用于将所述写指针指向所述缓冲区中的第二内存块,所述写指针用于指向所述缓冲区中当前可写入数据的内存块;
所述接收单元801还用于接收待写入数据,所述处理单元802还用于将所述待写入数据写入到所述第一内存块中。
可选的,所述接收单元801还用于在第一时刻之前接收到第二请求,所述第二请求用于请求申请所述缓冲区中的所述第二内存块,所述第一时刻为所述第一内存块对应的待写入数据完全被写入到所述第一内存块的时刻;
所述处理单元802还用于,将所述第二内存块的状态设置为第一状态;
所述处理单元802还用于,将所述写指针指向所述缓冲区中的第三内存块。
可选的,所述接收单元801还用于接收到数据读取请求;
所述处理单元802还用于,确定在第一时刻所述第一内存块对应的待写入数据完全被写入到所述第一内存块,在第二时刻所述第二内存块对应的待写入数据完全被写入到所述第二内存块;
所述处理单元802还用于,当所述第二时刻早于所述第一时刻时,将读指针指向所述第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据。
前述的数据处理方法的实施例涉及的各步骤的所有相关内容均可援引到本发明实施例中的数据处理装置所对应的功能模块的功能描述,在此不再赘述。
本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本发明各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
请参见图9,基于同一发明构思,本发明实施例提供一种数据处理装置,该系统包括至少一个处理器901,处理器901用于执行存储器中存储的计算机程序,实现本发明实施例提供的如图3所示的数据处理方法的步骤。
可选的,处理器901可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的数据处理方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
可选的,该数据处理装置还可以包括与至少一个处理器901连接的存储器902,存储器902存储有可被至少一个处理器901执行的指令,至少一个处理器901通过执行存储器902存储的指令,可以执行前述的数据处理方法中所包括的步骤。
本发明实施例中不限定处理器901与存储器902之间的具体连接介质,存储器902可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random Access Memory,RAM)、静态随机访问存储器(Static Random AccessMemory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器902是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器902还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
通过对处理器901进行设计编程,可以将前述实施例中介绍的数据处理方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述的数据处理方法的步骤,如何对处理器901进行设计编程为本领域技术人员所公知的技术,这里不再赘述。其中,接收单元801以及处理单元802所对应的实体设备均可以是前述的处理器901。该数据处理装置可以用于执行图3所示的实施例所提供的方法。因此关于该设备中各功能模块所能够实现的功能,可参考图3所示的实施例中的相应描述,不多赘述。
基于同一发明构思,本发明实施例还提供一种计算可读存储介质,该计算可读存储介质存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行如前述的数据处理方法的步骤。
在一些可能的实施方式中,本发明提供的数据处理方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在电子设备上运行时,程序代码用于使该检测设备执行本说明书上述描述的根据本发明各种示例性实施方式的数据处理方法中的步骤。本领域内的技术人员应明白,本发明实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
接收到第一请求,所述第一请求用于请求申请缓冲区中的第一内存块;
将所述第一内存块的状态设置为第一状态,所述第一状态用于表征所述第一内存块正在被写入数据或已被写入数据;
将写指针指向所述缓冲区中的第二内存块,所述写指针用于指向所述缓冲区中当前可写入数据的内存块;
接收待写入数据,将所述待写入数据写入到所述第一内存块中。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
在第一时刻之前,接收到第二请求,所述第二请求用于请求申请所述缓冲区中的所述第二内存块;所述第一时刻为所述第一内存块对应的待写入数据完全被写入到所述第一内存块的时刻;
将所述第二内存块的状态设置为所述第一状态;
将所述写指针指向所述缓冲区中的第三内存块。
3.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收到数据读取请求;
确定在第一时刻所述第一内存块对应的待写入数据完全被写入到所述第一内存块,在第二时刻所述第二内存块对应的待写入数据完全被写入到所述第二内存块;
当所述第二时刻早于所述第一时刻时,将读指针指向所述第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
将所述第二内存块的状态设置为第二状态,所述第二状态用于表征所述第二内存块正在被读取数据;
在第三时刻之前,将所述读指针指向所述第一内存块,以使数据读取装置基于所述读指针从所述第一内存块中读取数据,其中,所述第三时刻为读取所述第二内存块中的数据的完成时刻。
5.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收到数据读取请求;
将读指针指向所述第一内存块,以使数据读取装置基于所述读指针从所述第一内存块中读取数据;
将所述第一内存块的状态设置为第二状态,所述第二状态用于表征所述第一内存块正在被读取数据;
在第四时刻之前,将所述读指针指向第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据,所述第四时刻为读取所述第一内存块中的数据的完成时刻。
6.一种数据处理装置,其特征在于,包括:
接收单元,用于接收到第一请求,所述第一请求用于请求申请缓冲区中的第一内存块;
处理单元,用于将所述第一内存块的状态设置为第一状态,所述第一状态用于表征所述第一内存块正在被写入数据或已被写入数据;
所述处理单元还用于将所述写指针指向所述缓冲区中的第二内存块,所述写指针用于指向所述缓冲区中当前可写入数据的内存块;
所述接收单元还用于接收待写入数据,所述处理单元还用于将所述待写入数据写入到所述第一内存块中。
7.如权利要求6所述的装置,其特征在于,所述接收单元还用于在第一时刻之前接收到第二请求,所述第二请求用于请求申请所述缓冲区中的所述第二内存块,所述第一时刻为所述第一内存块对应的待写入数据完全被写入到所述第一内存块的时刻;
所述处理单元还用于,将所述第二内存块的状态设置为所述第一状态;
所述处理单元还用于,将所述写指针指向所述缓冲区中的第三内存块。
8.如权利要求6或7所述的装置,其特征在于,所述接收单元还用于接收到数据读取请求;
所述处理单元还用于,确定在第一时刻所述第一内存块对应的待写入数据完全被写入到所述第一内存块,在第二时刻所述第二内存块对应的待写入数据完全被写入到所述第二内存块;
所述处理单元还用于,当所述第二时刻早于所述第一时刻时,将读指针指向所述第二内存块,以使数据读取装置基于所述读指针从所述第二内存块中读取数据。
9.一种数据处理装置,其特征在于,包括:
存储器,用于存储计算机指令;
处理器,与所述存储器连接,用于执行所述存储器中的计算机指令,以及在执行所述计算机指令时执行如权利要求1至5中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110155702.7A CN112882831A (zh) | 2021-02-04 | 2021-02-04 | 一种数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110155702.7A CN112882831A (zh) | 2021-02-04 | 2021-02-04 | 一种数据处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112882831A true CN112882831A (zh) | 2021-06-01 |
Family
ID=76057240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110155702.7A Pending CN112882831A (zh) | 2021-02-04 | 2021-02-04 | 一种数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112882831A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114265670A (zh) * | 2022-03-02 | 2022-04-01 | 阿里云计算有限公司 | 一种内存块整理方法、介质及计算设备 |
-
2021
- 2021-02-04 CN CN202110155702.7A patent/CN112882831A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114265670A (zh) * | 2022-03-02 | 2022-04-01 | 阿里云计算有限公司 | 一种内存块整理方法、介质及计算设备 |
CN114265670B (zh) * | 2022-03-02 | 2022-09-23 | 阿里云计算有限公司 | 一种内存块整理方法、介质及计算设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113377695B (zh) | 读写分离的固态存储设备的数据分布方法 | |
AU2006262111A2 (en) | Managing memory pages | |
CN115576501B (zh) | 一种raid卡的节点更新方法、系统及相关装置 | |
CN113625973B (zh) | 数据写入方法、装置、电子设备及计算机可读存储介质 | |
CN113204407A (zh) | 一种内存超配管理方法及装置 | |
CN111475099B (zh) | 一种数据存储方法、装置及其设备 | |
CN112925606A (zh) | 一种内存管理方法、装置及设备 | |
CN112882831A (zh) | 一种数据处理方法及装置 | |
KR101103619B1 (ko) | 멀티 포트 메모리 및 그 억세스 제어 방법 | |
US8131918B2 (en) | Method and terminal for demand paging at least one of code and data requiring real-time response | |
CN115840654B (zh) | 消息的处理方法、系统、计算设备及可读存储介质 | |
CN114785662B (zh) | 一种存储管理方法、装置、设备及机器可读存储介质 | |
CN116243868A (zh) | 一种任务的处理方法、装置、设备和计算机可读存储介质 | |
CN115712394A (zh) | 数据读写方法、装置、计算机设备及可读存储介质 | |
CN116048414A (zh) | 一种设备的数据读取方法及电子设备 | |
CN116302376A (zh) | 进程创建方法、装置、电子设备及计算机可读介质 | |
CN111562983B (zh) | 内存优化方法、装置、电子设备及存储介质 | |
CN112114959B (zh) | 资源调度方法、分布式系统、计算机设备和存储介质 | |
CN112015672A (zh) | 一种存储系统中数据处理方法、装置、设备及存储介质 | |
CN113778688A (zh) | 内存管理系统、内存管理方法、内存管理装置 | |
CN113468105A (zh) | 数据快照的数据结构、相关数据处理方法及装置和系统 | |
CN113342270A (zh) | 卷卸载方法、装置和电子设备 | |
CN111666339A (zh) | 一种多线程数据同步方法 | |
CN117539407B (zh) | 数据存储方法、电子设备及计算机可读存储介质 | |
CN111435285B (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 |