首页 / 专利库 / 专利权 / 申请 / 国际申请 / 请求书 / 请求 / 队列控制方法及装置

队列控制方法及装置

阅读:672发布:2023-01-22

专利汇可以提供队列控制方法及装置专利检索,专利查询,专利分析的服务。并且本 申请 实施例 公开了队列控制方法及装置,所述方法包括:接收生产者线程发送的第一数据存储 请求 ,确定第一数据存储请求对应的分片队列;将第一数据存储请求所请求存储的第一数据存储到分片队列中;接收消费者线程发送的数据获取请求;根据数据获取请求从分片队列中获取第一数据;接收生产者线程发送的第二数据存储请求;将第二数据存储请求所请求存储的第二数据存储到分片队列中。通过分片队列的复用,提高了内存的使用效率。,下面是队列控制方法及装置专利的具体信息内容。

1.一种队列控制方法,其特征在于,所述方法包括:
接收生产者线程发送的第一数据存储请求
确定所述第一数据存储请求对应的分片队列;
将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中;
接收消费者线程发送的数据获取请求;
根据所述数据获取请求从所述分片队列中获取所述第一数据;
接收所述生产者线程发送的第二数据存储请求;
将所述第二数据存储请求所请求存储的第二数据存储到所述分片队列中。
2.如权利要求1所述的方法,其特征在于,所述将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中之前,还包括:
建立所述生产者线程和所述分片队列的关联关系,所述关联关系用于指示所述生产者线程独占所述分片队列的使用权。
3.如权利要求2所述的方法,其特征在于,所述建立所述生产者线程和所述分片队列的关联关系,包括:
在所述生产者线程的线程上下文中记录所述分片队列的队列标识信息;或者在所述分片队列中存储所述生产者线程的线程标识信息。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
接收所述生产者线程发送的第三数据存储请求;
确定所述第三数据存储请求对应的分片队列为所述分片队列;
当所述分片队列的当前数据量达到所述分片队列的预设容量时,将所述分片队列从第一分片队列集合移动至第二分片队列集合,所述第一分片队列集合包含当前数据量为零的分片队列,所述第二分片队列集合包含当前数据量达到其预设容量的分片队列;
在所述第一分片队列集合中重新选取一个分片队列;
将所述第三数据存储请求所请求存储的第三数据存储到所述重新选取的分片队列中。
5.如权利要求4所述的方法,其特征在于,所述确定所述第一数据存储请求对应的分片队列之前,还包括:
设置参数信息,所述参数信息包括在所述第一分片队列集合中待创建的分片队列的数量以及所述预设容量;
在所述第一分片队列集合中创建满足所述数量的分片队列,并为创建的各个分片队列分配满足所述预设容量的内存资源。
6.如权利要求4所述的方法,其特征在于,所述方法还包括:
在获取存储在所述分片队列中的所有数据之后,确定所述分片队列的当前数据量为零;
将所述分片队列从所述第二分片队列集合移动至所述第一分片队列集合。
7.如权利要求1所述的方法,其特征在于,所述分片队列所属的分片队列集合包括至少一个分片队列;
所述方法还包括:
在满足预设调整条件时,动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。
8.如权利要求7所述的方法,其特征在于,所述在满足预设调整条件时,动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种包括:
从最近一次动态调整开始经过预设时间段之后,确定满足所述预设调整条件;或者当存在当前数据量大于零的分片队列,且不存在当前数据量达到其预设容量的分片队列时,确定满足所述预设调整条件。
9.一种队列控制装置,其特征在于,所述装置包括:
接收模,用于接收生产者线程发送的第一数据存储请求;
处理模块,用于确定所述第一数据存储请求对应的分片队列;
所述处理模块,还用于将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中;
所述接收模块,还用于接收消费者线程发送的数据获取请求;
所述处理模块,还用于根据所述数据获取请求从所述分片队列中获取所述第一数据;
所述接收模块,还用于接收所述生产者线程发送的第二数据存储请求;
所述处理模块,还用于将所述第二数据存储请求所请求存储的第二数据存储到所述分片队列中。
10.如权利要求9所述的装置,其特征在于,
所述处理模块,还用于将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中之前,建立所述生产者线程和所述分片队列的关联关系,所述关联关系用于指示所述生产者线程独占所述分片队列的使用权。
11.如权利要求10所述的装置,其特征在于,所述处理模块建立所述生产者线程和所述分片队列的关联关系,具体用于:
在所述生产者线程的线程上下文中记录所述分片队列的队列标识信息;或者在所述分片队列中存储所述生产者线程的线程标识信息。
12.如权利要求9所述的装置,其特征在于,
所述接收模块,还用于接收所述生产者线程发送的第三数据存储请求;
所述处理模块,还用于确定所述第三数据存储请求对应的分片队列为所述分片队列;
所述处理模块,还用于当所述分片队列的当前数据量达到所述分片队列的预设容量时,将所述分片队列从第一分片队列集合移动至第二分片队列集合,所述第一分片队列集合包含当前数据量为零的分片队列,所述第二分片队列集合包含当前数据量达到其预设容量的分片队列;
所述处理模块,还用于在所述第一分片队列集合中重新选取一个分片队列;
所述处理模块,还用于将所述第三数据存储请求所请求存储的第三数据存储到所述重新选取的分片队列中。
13.如权利要求12所述的装置,其特征在于,
所述处理模块,还用于在确定所述第一数据存储请求对应的分片队列之前,设置参数信息,所述参数信息包括在所述第一分片队列集合中待创建的分片队列的数量以及所述预设容量;
所述处理模块,还用于在所述第一分片队列集合中创建满足所述数量的分片队列,并为创建的各个分片队列分配满足所述预设容量的内存资源。
14.如权利要求12所述的装置,其特征在于,
所述处理模块,还用于在获取存储在所述分片队列中的所有数据之后,确定所述分片队列的当前数据量为零;
所述处理模块,还用于将所述分片队列由第二分片队列集合移动至第一分片队列集合。
15.如权利要求9所述的装置,其特征在于,所述分片队列所属的分片队列集合包括至少一个分片队列;
所述处理模块,还用于在满足预设调整条件时,动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。
16.如权利要求15所述的装置,其特征在于,
所述处理模块,还用于在动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种之前,从最近一次动态调整开始经过预设时间段之后,确定满足所述预设调整条件;或者当存在当前数据量大于零的分片队列,且不存在当前数据量达到其预设容量的分片队列时,确定满足所述预设调整条件。
17.一种控制设备,其特征在于,所述控制设备包括处理器和存储器,所述处理器和所述存储器建立通信;
所述处理器,用于执行权利要求1-8任一项所述的方法。
18.一种计算机存储介质,其特征在于,所述计算机存储介质存储有程序,控制设备运行所述程序以执行如权利要求1-8任一项所述的方法。

说明书全文

队列控制方法及装置

技术领域

[0001] 本申请涉及通信技术领域,尤其涉及队列控制方法及装置。

背景技术

[0002] 多线程,是指从软件或者硬件上实现多个线程并发执行的技术。多线程访问时,为了保证线程安全,会在队列的结构体中加入一个队列以锁住整个队列,然后一个线程可以对该队列进行相关的操作,其他线程不能对该队列进行访问,直至对该队列进行相关操作的线程读取完数据之后,其他线程才可以对该线程进行访问。线程安全的队列可以包括有锁的阻塞队列或者采用非阻塞式算法的非阻塞队列。
[0003] 针对非阻塞队列,一条消息添加到队列中时,队列会创建一个节点,该操作会申请内存资源以存储该节点相关信息;当该消息出队后,对应节点依旧存在于内存中,通过垃圾回收(GarbageCollection,GC)释放该节点的内存资源。在事件处理系统或者高性能服务器的消息队列中,假设每条事件包含20个变量,若要达到100万每秒执行的事务数量(transactions per second,TPS),需要多个线程从队列中添加以及删除对象100万*20*2=4000万次/秒,消息在入队时会创建一个节点,并为该节点分配内存资源,该节点的内存资源是在消息出队后,通过GC来完成内存释放,当操作频次达到一定量级时,频繁的内存申请及GC成为制约性能的关键,导致内存的使用效率较低。发明内容
[0004] 本申请实施例所要解决的技术问题在于,提供队列控制方法及装置,通过分片队列的复用,提高了内存的使用效率。
[0005] 第一方面,本申请实施例提供了一种队列控制方法,控制设备接收生产者线程发送的第一数据存储请求之后,可以确定第一数据存储请求对应的分片队列,并将第一数据存储请求所请求存储的第一数据存储到分片队列中。进一步的,控制设备接收消费者线程发送的数据获取请求之后,可以根据数据获取请求从分片队列中获取第一数据。然后,控制设备接收生产者线程发送的第二数据存储请求之后,可以将第二数据存储请求所请求存储的第二数据存储到该分片队列中。
[0006] 在该技术方案中,控制设备在接收到生产者线程发送的第一数据存储请求时,在预先分配有内存资源的至少一个分片队列中确定第一数据存储请求对应的分片队列,无需每接收到一个数据存储请求实时创建一个分片队列,并为该分片队列分配内存资源。另外,控制设备获取存储在分片队列中的第一数据之后,无需通过GC释放该分片队列的内存资源,而是循环复用该分片队列的内存资源,即在下次接收到第二数据存储请求时,将第二数据存储请求所请求存储的第二数据存储到该分片队列中。相对传统的队列控制方法中每有一条消息添加到队列中时,需要创建一个节点,申请内存资源以存储该节点相关信息,且在该消息出队后,对应节点依旧存在于内存中,通过GC释放该节点的内存资源,本申请实施例可循环复用分片队列的内存,无需频繁创建分片队列以及释放分片队列的内存,提高了分片队列的使用效率。
[0007] 在一个设计方案中,控制设备将第一数据存储请求所请求存储的第一数据存储到分片队列中之前,还可以建立生产者线程和分片队列的关联关系,关联关系用于指示生产者线程独占分片队列的使用权。
[0008] 在该技术方案中,每个分片队列仅分配给一个线程独占使用,相对现有非阻塞队列在多线程操作时,通过比较并交换(Compare and Swap,CAS)解决并发冲突,具体是多个线程依次抢得资源进行写操作,非阻塞队列是采用CAS来高效的解决原子操作(原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断,在多线程访问共享资源时,能够确保所有其他的线程都不在同一时间内访问相同的资源),但是在高并发场景下,CAS相关的一系列CPU指令同样存在互相争抢的情况,成为性能瓶颈,以及有锁的阻塞队列在多线程操作时,有锁队列竞争会产生性能瓶颈,本申请实施例可有效减少多线程访问造成的锁争抢和原子操作资源争抢次数,提高数据并发处理能,并提高系统吞吐量。
[0009] 在一个设计方案中,控制设备建立生产者线程和分片队列的关联关系的具体方式可以为:在生产者线程的线程上下文中记录分片队列的队列标识信息;或者在分片队列中存储生产者线程的线程标识信息。
[0010] 在一个设计方案中,控制设备还可以接收生产者线程发送的第三数据存储请求,确定第三数据存储请求对应的分片队列为上述分片队列,当分片队列的当前数据量达到分片队列的预设容量时,将分片队列从第一分片队列集合移动至第二分片队列集合,第一分片队列集合包含当前数据量为零的分片队列,第二分片队列集合包含当前数据量达到其预设容量的分片队列,在第一分片队列集合中重新选取一个分片队列,并将第三数据存储请求所请求存储的第三数据存储到重新选取的分片队列中。
[0011] 在一个设计方案中,控制设备确定第一数据存储请求对应的分片队列之前,可以设置参数信息,参数信息包括在所述第一分片队列集合中待创建的分片队列的数量以及预设容量,在所述第一分片队列集合中创建满足该数量的分片队列,并为创建的各个分片队列分配满足该预设容量的内存资源。
[0012] 在一个设计方案中,控制设备在获取存储在所述分片队列中的所有数据之后,确定所述分片队列的当前数据量为零,可以将分片队列从第二分片队列集合移动至第一分片队列集合。
[0013] 在一个设计方案中,分片队列所属的分片队列集合包括至少一个分片队列,在满足预设调整条件时,控制设备可以动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。
[0014] 在一个设计方案中,控制设备从最近一次动态调整开始经过预设时间段之后,可以确定满足预设调整条件;或者当存在当前数据量大于零的分片队列,且不存在当前数据量达到其预设容量的分片队列时,控制设备可以确定满足预设调整条件。
[0015] 在一个设计方案中,控制设备将第一数据存储请求所请求存储的第一数据存储到分片队列中的具体方式可以为:将第一数据存储到分片队列对应的数组中。
[0016] 在一个设计方案中,控制设备接收消费者线程发送的数据获取请求之后,当不存在数据量达到其预设容量的分片队列时,可以获取当前数据量大于零的分片队列,并获取存储在该当前数据量大于零的分片队列中的数据。
[0017] 第二方面,本申请实施例提供一种非易失性的计算机存储介质,所述计算机存储介质存储有程序,控制设备运行该程序以执行第一方面中任一所述的方法。
[0018] 第三方面,本申请实施例提供一种队列控制装置,该装置具有实现第一方面所述的方法示例中控制设备行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元或模
[0019] 在一个设计方案中,装置的结构中可包括接收模块和处理模块,所述处理模块被配置为支持控制设备执行第一方面任一所述方法中相应的功能。所述接收模块用于支持控制设备与线程之间的通信,线程例如生产者线程或者消费者线程。
[0020] 第四方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在控制设备上运行时,使得控制设备执行第一方面任一所述的方法。
[0021] 第五方面,本申请实施例提供了一种控制设备,该控制设备包括处理器和存储器,存储器可以存储程序代码以及至少一个分片队列,处理器用于执行所述程序代码以实现上述第一方面中所涉及的功能,例如,生成或处理上述方法中所涉及的数据和/或信息。附图说明
[0022] 为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
[0023] 图1是本申请实施例公开的一种队列控制系统的结构示意图;
[0024] 图2是本申请实施例公开的一种多线程操作的示意图;
[0025] 图3是本申请实施例公开的一种队列控制方法的流程示意图;
[0026] 图4是本申请实施例公开的一种测试结果的示意图;
[0027] 图5是本申请实施例公开的一种队列控制装置的结构示意图;
[0028] 图6是本申请实施例公开的一种控制设备的结构示意图。

具体实施方式

[0029] 下面结合本申请实施例中的附图对本申请实施例进行描述。
[0030] 为了更好的理解本申请实施例公开的一种队列控制方法及装置,下面首先对本申请实施的队列控制系统进行描述。请参见图1,图1是本申请实施例公开的一种队列控制系统的结构示意图,该队列控制系统可以包括队列存储模块(Concurrent Sharded Queue)、队列管理模块、至少一个生产者线程和至少一个消费者线程。队列存储模块中的各个分片队列(Partition Queue)预先分配有内存资源,生产者线程向队列管理模块发送数据存储请求时,队列管理模块可以从队列存储模块中确定一个分片队列,并将数据存储请求所请求存储的第一数据存储到确定的分片队列中。消费者线程向队列管理模块发送数据获取请求时,队列管理模块可以获取存储在上述分片队列中的第一数据。队列管理模块获取存储在上述分片队列中的第一数据之后,上述分片队列的内存资源不会被释放,而是循环复用,即接队列管理模块收到生产者线程发送的第二数据存储请求时,将第二数据存储请求所请求存储的第二数据存储到上述分片队列中。
[0031] 其中,队列存储模块在创建时可以根据预设策略配置一定数量的分片队列,并设置各个分片队列的预设容量。每个分片队列对应一个数组,在创建时可以完成对分片队列的内存资源的分配。分片队列是一个逻辑概念,其具体实现是一个数组。可选的,该数组可以为原生数据,原生数组可实现单纯的数组操作,没有复杂的数据结构,无其他开销,性能最优。
[0032] 其中,初始配置分片队列之后,各个分片队列的当前数据量为零,则队列管理模块可以将初始配置的各个分片队列移动至E组分片队列(即第一分片队列集合)。当队列管理模块接收到生产者线程发送的数据存储请求时,队列管理模块可以从E组分片队列中获取一个分片队列,该分片队列的当前数据量为零。然后,队列管理模块将数据存储请求所请求存储的数据存储到该分片队列的数组中。当该分片队列的当前数据量达到该分片队列的预设容量时,队列管理模块可以将该分片队列由E组分片队列移动至F组分片队列(即第二分片队列集合)。当队列管理模块接收到消费者线程发送的数据获取请求时,队列管理模块可以从F组分片队列中获取一个分片队列,该分片队列的当前数据量达到该分片队列的预设容量。然后,队列管理模块获取存储在该分片队列中的数据。在该分片队列的当前数据量为零时,该分片队列处于清空状态,队列管理模块可以将该分片队列从F组分片队列移动至E组分片队列。也就是说,分片队列的内存资源是提前分配的,在存储数据时,将数据存储到分片队列中即可,无需再创建队列节点;获取存储在分片队列中的数据之后,无需释放该分片队列的内存资源从而避免引发GC,分片队列的内存不变,提高了内存的使用效率。
[0033] 其中,当队列管理模块接收到生产者线程发送的数据存储请求时,从E组分片队列中获取一个分片队列之后,队列管理模块可以建立生产者线程和该分片队列的关联关系,该关联关系用于指示上述生产者线程独占该分片队列的使用权,即其他生产者线程无权向该分片队列中存储数据,且消费者线程无权获取存储在该分片队列中的数据。当该生产者线程向该分片队列中存储数据的流程结束时,队列管理模块可以删除该生产者线程和该分片队列的关联关系。当队列管理模块接收到消费者线程发送的数据获取请求时,从F组分片队列中获取一个分片队列之后,队列管理模块可以建立消费者线程和该分片队列的关联关系,该关联关系用于指示上述消费者线程独占该分片队列的使用权,即其他消费者线程无权获取存储在该分片队列中的数据,且生产者线程无权向该分片队列中存储数据。当该消费者线程获取存储在该分片队列中的数据的流程结束时,队列管理模块可以删除该消费者线程和该分片队列的关联关系。也就是说,通过建立关联关系,其他线程不会和当前建立关联关系的线程进行分片队列的竞争,则数据处理是高效无竞争的,可有效减少多线程访问造成的锁争抢和原子操作资源争抢次数,提高数据并发处理能力。
[0034] 以图2所示的多线程操作的示意图为例,生产者线程T1、T2以及T3分别向队列管理模块发送数据存储请求时,队列管理模块可以为每个生产者线程分配一个分片队列,例如为生产者线程T1分配的分片队列为第一分片队列,为生产者线程T2分配的分片队列为第二分片队列,为生产者线程T3分配的分片队列为第三分片队列,队列管理模块可以将生产者线程T1请求存储的数据存储到第一分片队列对应的数组中,将生产者线程T2请求存储的数据存储到第二分片队列对应的数组中,将生产者线程T3请求存储的数据存储到第三分片队列对应的数组中,即多个线程向各自分配的分片队列进行数据操作,可避免资源争抢。
[0035] 请参见图3,图3是本申请实施例提供的一种队列控制方法,该方法包括但不限于如下步骤:
[0036] 步骤S301:控制设备在接收到生产者线程发送的第一数据存储请求时,确定第一数据存储请求对应的分片队列。
[0037] 具体地,控制设备接收到生产者线程发送的第一数据存储请求之后,可以在第一分片队列集合中选取分片队列,将选取的分片队列作为第一数据存储请求对应的分片队列。例如,E组分片队列包括多个分片队列,上述多个分片队列可以根据移动至E组分片队列的移动时间进行排序,控制设备可以在E组分片队列中选取当前数据量为零的分片队列,在当前数据量为零的分片队列中选取移动时间最早的分片队列,将选取的分片队列作为第一数据存储请求对应的分片队列。又如,控制设备可以在E组分片队列中随机选取一个当前数据量为零的分片队列,将选取的分片队列作为第一数据存储请求对应的分片队列。
[0038] 其中,控制设备可以为用户设备或者网络设备等。用户设备例如可穿戴设备、车载设备或者手机等。网络设备例如服务器、基站、路由器或者交换机等。
[0039] 在一个设计方案中,控制设备接收生产者线程发送的第一数据存储请求之前,可以创建队列基础结构,初始化多线程上下文结构(ThreadLocalProducerSharding/ConsumerSharding),根据预设策略设置分片队列的数量和预设容量,创建满足该数量的分片队列,创建数组,并对各个分片队列分配满足该预设容量的内存资源,进而将各个分片队列移动至E组分片队列。
[0040] 在一个设计方案中,控制设备将第一数据存储请求所请求存储的第一数据存储到分片队列中之前,可以建立生产者线程和分片队列的关联关系,关联关系用于指示生产者线程独占该分片队列的使用权。例如,控制设备建立生产者线程和分片队列的关联关系的方式可以为:在生产者线程的线程上下文中记录分片队列的队列标识信息,或者在分片队列中存储生产者线程的线程标识信息。
[0041] 具体地,若控制设备在创建分片队列之后第一次接收到该生产者线程发送的数据存储请求,即控制设备没有为该生产者线程分配过分片队列,则控制设备可以为该生产者线程创建线程上下文,为该生产者线程分配一个当前数据量为零的分片队列,并在该生产者线程的线程上下文中记录该分片队列的队列标识信息。或者,控制设备可以遍历分片队列,在未被使用且当前数据量为零的分片队列中标记该生产者线程的线程标识信息。当该分片队列不存在与其他线程之间的关联关系时,控制设备可以确定该分片队列未被使用。
[0042] 其中,队列基础结构指的是分片队列中的一系列成员对象。
[0043] 其中,初始化多线程上下文结构的具体方式可以为:通过管理多线程上下文信息,后续数据操作时记录为每个线程分配的分片队列的队列标识信息,从而实现该队列标识信息所对应分片队列被该线程独占使用,或者后续数据操作时在为每个线程分配的分片队列中添加该线程的线程标识信息,以表明线程标识信息所对应线程拥有该队列的使用权。
[0044] 其中,控制设备可以在创建分片队列时设置策略,进而根据设置的策略设置分片队列的数量和预设容量。当控制设备未设置策略时,可以根据默认策略设置分片队列的数量和预设容量,示例性的,默认策略可以为控制设备在出厂时配置的策略。
[0045] 示例性的,预设策略可以为:通过Rebalance算法,动态控制单位时间内生产/消费的分片队列数量及预设容量等。例如,控制设备检测到单位时间内对分片队列的访问频率大于预设频率阈值时,可以增加分片队列的数量或者预设容量等中的至少一种。通过预设策略动态设置分片队列的数量或者预设容量,可调整性能,使其满足单位时间访问频率目标和分配比例目标。
[0046] 其中,单位时间访问频率目标可以保证单位时间内操作生产/消费分片队列的速率,避免频发访问共享分片队列(即被生产者线程和消费者线程同时使用的分片队列),减少并发冲突,提高性能。示例性的,单位时间可以为100ms内,生产/消费分片队列访问频率比例达到1/8,在100ms内,生产/消费分片队列访问频率比例达到1/8时,控制设备可以对分片队列的数量或者预设容量进行动态调整。
[0047] 其中,分配比例目标可以保证总是有可供生产者线程或者消费者线程使用的分片队列,且缓冲的分片队列的数量合理,可用应对突发的生产者线程或者消费者线程处理数据的速率不一致。
[0048] 其中,单位时间内分配分片队列的数量和预设容量可以保证单位时间内消费分片队列的速率,避免频发访问分片队列,提高性能,同时可以向分配比例目标对齐。
[0049] 步骤S302:控制设备将第一数据存储请求所请求存储的第一数据存储到分片队列中。
[0050] 控制设备确定分片队列之后,可以将第一数据存储请求所请求存储的第一数据存储到分片队列对应的数组中。当该分片队列的当前数据量达到该分片队列的预设容量,且第一数据存储请求所请求存储的第一数据未存储完毕时,控制设备可以将该分片队列由E组分片队列移动至F组分片队列中,删除该分片队列和该生产者线程的关联关系。然后,控制设备可以在E组分片队列中再次选取一个当前数据量为零的分片队列,建立该分片队列和该生产者线程的关联关系,将第一数据存储请求所请求存储的第一数据中未存储的数据存储到该分片队列中,当第一数据存储请求所请求存储的第一数据存储完毕或者该分片队列的当前数据量达到该分片队列的预设容量时,控制设备可以删除该分片队列和该生产者线程的关联关系。
[0051] 在一个设计方案中,第一数据存储请求所请求存储的第一数据存储完毕之后,控制设备可以记录当前资源使用信息,以便控制设备在满足预设调整条件时,基于上述资源使用信息动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。示例性的,资源使用信息可以包括数据存储失败的次数,数据存储或者读取超时的次数,或者数据存储成功的次数等。
[0052] 在一个设计方案中,控制设备检测分片队列是否已经插满数据的方式可以为:当分片队列的当前数据量达到该分片队列的预设容量时,确定该分片队列已经插满数据。或者,控制设备可以根据分片队列的插入性能来判断分片队列是否已经插满数据。
[0053] 步骤S303:控制设备在接收到消费者线程发送的数据获取请求时,根据数据获取请求从分片队列中获取第一数据。
[0054] 具体地,控制设备接收到消费者线程发送的数据获取请求之后,可以在第二分片队列集合中选取分片队列,将选取的分片队列作为数据获取请求对应的分片队列,其中数据获取请求对应的分片队列为第一数据存储请求对应的分片队列。例如,F组分片队列包括多个分片队列,上述多个分片队列可以根据移动至F组分片队列的移动时间进行排序,控制设备可以在F组分片队列中选取当前数据量达到其预设容量的分片队列,在当前数据量达到其预设容量的分片队列中选取移动时间最早的分片队列。又如,控制设备可以在F组分片队列中随机选取一个当前数据量达到其预设容量的分片队列。若控制设备选取的分片队列为存储第一数据的分片队列,则控制设备可以获取存储在该分片队列中的第一数据,例如控制设备从该分片队列的数组中获取第一数据。
[0055] 示例性的,若控制设备在创建分片队列之后第一次接收到该消费者线程发送的数据获取请求,即控制设备没有为该消费者线程分配过分片队列,则控制设备可以为该消费者线程创建线程上下文,为该消费者线程分配一个当前数据量达到其预设容量的分片队列,并在该消费者线程的线程上下文中记录该分片队列的队列标识信息。或者,控制设备可以遍历分片队列,在当前未被使用且当前数据量达到其预设容量的分片队列中标记该消费者线程的线程标识信息。当该分片队列不存在与其他线程之间的关联关系时,控制设备可以确定该分片队列未被使用。
[0056] 在一个设计方案中,控制设备获取存储在分片队列中的所有数据之后,该分片队列的当前数据量为零,控制设备可以将该分片队列由F组分片队列移动至E组分片队列中,删除该分片队列和该消费者线程的关联关系。然后,控制设备可以在F组分片队列中再次选取一个当前未被使用的分片队列,建立该分片队列和该消费者线程的关联关系,将数据获取请求所请求获取的数据中未获取的数据存储到该分片队列中,当数据获取请求所请求获取的数据获取完毕或者该分片队列的当前数据量为零时,控制设备可以删除该分片队列和该消费者线程的关联关系。
[0057] 在一个设计方案中,当F组分片队列中不存在分片队列,且E组分片队列中存在当前数据量大于零的分片队列时,控制设备可以检测该当前数据量大于零的分片队列是否正在被使用,当该当前数据量大于零的分片队列未被使用时,控制设备可以获取存储在该当前数据量大于零的分片队列中的数据;当该当前数据量大于零的分片队列正在被使用时,控制设备可以删除该分片队列与其他线程的关联关系,进而获取存储在该当前数据量大于零的分片队列中的数据。
[0058] 在一个设计方案中,当控制设备接收到消费者线程发送的数据获取请求时,不存在当前数据量达到其预设容量的分片队列,且存在当前数据量大于零的分片队列时,可能为动态调整分片队列的数量或者预设容量等策略的设置不够合理,可以触发Rebalance算法进行调整优化。例如,通过控制单位时间内生产/消费分片队列的数量,动态调整性能,使其满足单位时间访问频率目标和分配比例目标。示例性的,控制设备可以根据分配比例目标,确定需要参与Rebalance计算的分片队列的数量,然后根据单位时间访问频率目标,入队(Offer)操作的速率,出队(Poll)操作的速率,参与Rebalance计算的分片队列的数量,计算每个分片队列的预设容量。
[0059] 步骤S304:控制设备在接收到生产者线程发送的第二数据存储请求时,将第二数据存储请求所请求存储的第二数据存储到该分片队列中。
[0060] 控制设备获取存储在分片队列中的第一数据之后,无需对分片队列的内存资源进行释放,在接收到任一生产者线程发送的数据存储请求时,可以直接将数据存储到该分片队列中。例如,控制设备在接收到上述生产者线程发送的第二数据存储请求时,确定第二数据存储请求对应的分片队列为上述数据获取请求对应的分片队列,则控制设备可以将第二数据存储请求所请求存储的第二数据存储到分片队列中。
[0061] 在一个设计方案中,在队列控制流程中,控制设备检测到满足预设调整条件时,可以动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。例如,从最近一次动态调整开始经过预设时间段之后,控制设备可以确定满足预设调整条件,进而进行动态调整。又如,当存在当前数据量大于零的分片队列,且不存在当前数据量达到其预设容量的分片队列时,控制设备可以确定满足预设调整条件,进而进行动态调整。
[0062] 以图4所示的测试结果的示意图为例,相对传统的多线程并发访问单个分片队列,本申请实施例可有效减少锁争抢和原子操作资源争抢次数,提高系统吞吐量和内存使用效率。其中,有锁且存在新对象内存分配和GC回收(每条数据会创建节点对象)的有锁的阻塞队列的数据处理效率最慢;无锁且不需要新对象分配内存和GC的分片队列的数据处理效率最快,大约是有锁的阻塞队列的68倍以上,是非阻塞队列的8倍以上。
[0063] 在图3所描述的方法中,控制设备在接收到生产者线程发送的第一数据存储请求时确定第一数据存储请求对应的分片队列,并将第一数据存储请求所请求存储的第一数据存储到分片队列中。进一步的,控制设备在接收到消费者线程发送的数据获取请求时,获取存储在该分片队列中的第一数据。然后,控制设备在接收到生产者线程发送的第二数据存储请求时,将第二数据存储请求所请求存储的第二数据存储到该分片队列中,可提高内存的使用效率。
[0064] 上述详细阐述了本申请实施例的方法,下面提供了本申请实施例的装置。
[0065] 请参见图5,图5是本申请实施例提供的一种队列控制装置的结构示意图,用于实现图3实施例中控制设备的功能,队列控制装置的功能块可由硬件、软件或硬件与软件的组合来实施本申请方案。所属领域的技术人员应理解,图5中所描述的功能块可经组合或分离为若干子块以实施本申请方案。因此,本申请中上面描述的内容可支持对下述功能模块的任何可能的组合或分离或进一步定义。
[0066] 如图5所示,队列控制装置应用于控制设备,所述控制设备包括至少一个分片队列,队列控制装置可包括:接收模块501和处理模块502,其中,各个模块的详细描述如下。
[0067] 接收模块501,用于接收生产者线程发送的第一数据存储请求;
[0068] 处理模块502,用于确定所述第一数据存储请求对应的分片队列;
[0069] 所述处理模块502,还用于将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中;
[0070] 所述接收模块501,还用于接收消费者线程发送的数据获取请求;
[0071] 所述处理模块502,还用于根据所述数据获取请求从分片队列中获取所述第一数据;
[0072] 所述接收模块501,还用于接收所述生产者线程发送的第二数据存储请求;
[0073] 所述处理模块502,还用于将所述第二数据存储请求所请求存储的第二数据存储到所述分片队列中。
[0074] 在一个设计方案中,处理模块502,还用于将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中之前,建立所述生产者线程和所述分片队列的关联关系,所述关联关系用于指示所述生产者线程独占所述分片队列的使用权。
[0075] 在一个设计方案中,处理模块502建立所述生产者线程和所述分片队列的关联关系,具体用于:
[0076] 在所述生产者线程的线程上下文中记录所述分片队列的队列标识信息;或者[0077] 在所述分片队列中存储所述生产者线程的线程标识信息。
[0078] 在一个设计方案中,处理模块502,还用于接收所述生产者线程发送的第三数据存储请求;
[0079] 所述处理模块502,还用于确定所述第三数据存储请求对应的分片队列为所述分片队列;
[0080] 所述处理模块502,还用于当所述分片队列的当前数据量达到所述分片队列的预设容量时,将所述分片队列从第一分片队列集合移动至第二分片队列集合,所述第一分片队列集合包含当前数据量为零的分片队列,所述第二分片队列集合包含当前数据量达到其预设容量的分片队列;
[0081] 所述处理模块502,还用于在所述第一分片队列集合中重新选取一个分片队列;
[0082] 所述处理模块502,还用于将所述第三数据存储请求所请求存储的第三数据存储到所述重新选取的分片队列中。
[0083] 在一个设计方案中,处理模块502,还用于在确定所述第一数据存储请求对应的分片队列之前,设置参数信息,所述参数信息包括在所述第一分片队列集合中待创建的分片队列的数量以及预设容量;在所述第一分片队列集合中创建满足所述数量的分片队列,并为创建的各个分片队列分配满足所述预设容量的内存资源。
[0084] 在一个设计方案中,处理模块502,还用于在获取存储在所述分片队列中的所有数据之后,确定所述分片队列的当前数据量为零,将所述分片队列从第二分片队列集合移动至第一分片队列集合。
[0085] 在一个设计方案中,分片队列所属的分片队列集合包括至少一个分片队列,则处理模块502,还用于在满足预设调整条件时,动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。
[0086] 在一个设计方案中,处理模块502,还用于动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种之前,从最近一次动态调整开始经过预设时间段之后,确定满足所述预设调整条件;或者当存在当前数据量大于零的分片队列,且不存在当前数据量达到其预设容量的分片队列时,确定满足所述预设调整条件。
[0087] 需要说明的是,各个模块的实现还可以对应参照图3所示的实施例的相应描述。
[0088] 需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。本申请实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0089] 请参见图6,图6是本申请实施例公开的一种控制设备的结构示意图。如图6所示,该控制设备可以包括:至少一个处理器601、总线602、接收器603以及存储器604。其中,接收器603、存储器604以及处理器601通过总线602相互连接;总线602可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线可以分为地址总线数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中,处理器601可以是中央处理器(Central Processing Unit,CPU),网络处理器(network processor,NP),通用处理器,数字信号处理器(Digital Signal Processor,DSP),专用集成电路(Application-Specific Integrated Circuit,ASIC),现场可编程阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。在处理器601是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU,处理器601可以对应图1中的队列管理模块。存储器604可以存储程序代码、以及至少一个分片队列。当存储器604包括分片队列时,可实现图1中队列存储模块所描述的功能。该控制设备还可以包括发射器605,其中:
[0090] 在接收器603接收到生产者线程发送的第一数据存储请求时,处理器601确定所述第一数据存储请求对应的分片队列;
[0091] 处理器601将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中;
[0092] 在接收器603接收到消费者线程发送的数据获取请求时,处理器601根据所述数据获取请求从所述分片队列中获取所述第一数据;
[0093] 在接收器603接收到所述生产者线程发送的第二数据存储请求时,处理器601将所述第二数据存储请求所请求存储的第二数据存储到所述分片队列中。
[0094] 在一个设计方案中,所述处理器601将所述第一数据存储请求所请求存储的第一数据存储到所述分片队列中之前,还可以执行以下操作:
[0095] 建立所述生产者线程和所述分片队列的关联关系,所述关联关系用于指示所述生产者线程独占所述分片队列的使用权。
[0096] 在一个设计方案中,所述处理器601建立所述生产者线程和所述分片队列的关联关系,具体可以为:
[0097] 在所述生产者线程的线程上下文中记录所述分片队列的队列标识信息;或者[0098] 在所述分片队列中存储所述生产者线程的线程标识信息。
[0099] 在一个设计方案中,接收器603还可以接收所述生产者线程发送的第三数据存储请求;
[0100] 处理器601确定所述第三数据存储请求对应的分片队列为所述分片队列;
[0101] 当所述分片队列的当前数据量达到所述分片队列的预设容量时,处理器601将所述分片队列从第一分片队列集合移动至第二分片队列集合,所述第一分片队列集合包含当前数据量为零的分片队列,所述第二分片队列集合包含当前数据量达到其预设容量的分片队列;
[0102] 处理器601在所述第一分片队列集合中重新选取一个分片队列;
[0103] 处理器601将所述第三数据存储请求所请求存储的第三数据存储到所述重新选取的分片队列中。
[0104] 在一个设计方案中,所述处理器601确定所述第一数据存储请求对应的分片队列之前,还可以执行以下操作:
[0105] 设置参数信息,所述参数信息包括在所述第一分片队列集合中待创建的分片队列的数量以及预设容量;
[0106] 在所述第一分片队列集合中创建满足所述数量的分片队列,并为创建的各个分片队列分配满足所述预设容量的内存资源。
[0107] 在一个设计方案中,所述处理器601获取存储在所述分片队列中的所述第一数据之后,还可以执行以下操作:
[0108] 在获取存储在所述分片队列中的所有数据之后,确定所述分片队列的当前数据量为零;
[0109] 将所述分片队列由第二分片队列集合移动至第一分片队列集合中。
[0110] 在一个设计方案中,分片队列所属的分片队列集合包括至少一个分片队列,则处理器601可以在满足预设调整条件时,动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种。
[0111] 在一个设计方案中,所述可以在满足预设调整条件时,动态调整单位时间内用于存储数据的分片队列的数量总和,单位时间内用于获取数据的分片队列的数量总和,或者各个分片队列的预设容量中的至少一种之前,还可以执行以下操作:
[0112] 从最近一次动态调整开始经过预设时间段之后,确定满足所述预设调整条件;或者
[0113] 当存在当前数据量大于零的分片队列,且不存在当前数据量达到其预设容量的分片队列时,确定满足所述预设调整条件。
[0114] 应当理解,控制设备仅为本申请实施例提供的一个例子,并且,控制设备可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。
[0115] 具体的,本申请实施例中介绍的服务器可以用以实施本申请结合图3介绍的方法实施例中的部分或全部流程。
[0116] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、存储盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态存储盘Solid State Disk(SSD))等。
相关专利内容
标题 发布/更新时间 阅读量
请求处理技术 2020-05-12 645
短资源请求 2020-05-11 223
请求额外频谱 2020-05-12 545
HTTPS请求充实 2020-05-11 375
请求式定位 2020-05-11 977
并发请求调度 2020-05-12 648
预留请求改进 2020-05-12 927
存储器请求仲裁 2020-05-13 245
触发多载波请求 2020-05-13 49
触发多载波请求 2020-05-13 346
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈