CN113176896A - 一种基于单进单出无锁队列的随机取出对象的方法 - Google Patents
一种基于单进单出无锁队列的随机取出对象的方法 Download PDFInfo
- Publication number
- CN113176896A CN113176896A CN202110294432.8A CN202110294432A CN113176896A CN 113176896 A CN113176896 A CN 113176896A CN 202110294432 A CN202110294432 A CN 202110294432A CN 113176896 A CN113176896 A CN 113176896A
- Authority
- CN
- China
- Prior art keywords
- tail
- obj
- size
- pointer
- array
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000013507 mapping Methods 0.000 claims description 8
- 230000008901 benefit Effects 0.000 abstract description 7
- 230000001360 synchronised effect Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 7
- 238000012217 deletion Methods 0.000 description 5
- 230000037430 deletion Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000032683 aging Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
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
本发明公开一种基于单进单出无锁队列的随机取出对象的方法,其中,该方法包括:对size大小的对象池进行内存布局;将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间;消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放。该方法相比于现有单进单出无锁队列,它多具备了“支持异步无锁/同步随机取出”、“已分配区间即队列”和“空闲对象无须查找”三个特点,将现有单进单出无锁队列的应用场景扩展到“网络会话管理”这类需求,并且还具有性能优势。
Description
技术领域
本发明涉及单进单出无锁队列领域,尤其是一种基于单进单出无锁队列的随机取出对象的方法。
背景技术
单进单出无锁队列,是一种已经存在的算法,支持单生产者线程向HEAD位置添加对象,单消费者线程从TAIL位置取出对象,如图1所示。
但是,现有单进单出无锁队列,同时也是FIFO(first in first out)队列,即消费者线程只可以固定从TAIL位置取出对象,不可以越过TAIL位置,在[HEAD,TAIL)区间执行取出对象操作,如图2所示。
发明内容
为克服现有单进单出无锁队列存在的上述问题,本发明提供一种基于单进单出无锁队列的随机取出对象的方法,可以从[HEAD,TAIL]区间随机取出对象。
为实现上述目的,本发明采用下述技术方案:
在本发明一实施例中,提出了一种基于单进单出无锁队列的随机取出对象的方法,该方法包括:
对size大小的对象池进行内存布局;
将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间;
消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放。
进一步地,对size大小的对象池进行内存布局,包括:
对象池前面部分为对象指针数组p[size],后面部分为对象实体数组obj[size];
设置对象指针数组p[size]中的各个指针指向;
设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向;
将对象指针数组p[size]实现为无锁环形队列。
进一步地,设置对象指针数组p[size]中的各个指针指向,包括:
设置对象指针数组p[size]中的各个指针,指向对象实体数组obj[size]中对应下标处的对象。
进一步地,设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向,包括:
让对象实体数组obj[size]中每个对象实体携带一个隐式尾部pos,用于存储指向该对象的指针,在对象指针数组p[size]中的下标值,使得对象池刚建立时,形成对象指针与对象实体的相互映射关系。
进一步地,将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间,包括:
[HEAD,TAIL]为使用区间,指向生产者线程添加且未被消费者线程取出的对象,其余部分为空闲区间,指向空闲对象。
进一步地,消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放,包括:
执行释放操作前的使用区间状态;
交换p[N]与p[TAIL]的值;
交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]对象的pos值。
进一步地,执行释放操作前的使用区间状态,包括:
将p[N]此时指向的对象记作obj[M],将p[TAIL]此时指向的对象记作obj[T],并消费者线程此时只有p[N]的值,没有p[N]本身的地址,通过obj[M].pos即可获取N值。
进一步地,交换p[N]与p[TAIL]的值,包括:
交换p[N]与p[TAIL]的值,使p[TAIL]指向期望释放的对象obj[M],p[N]指向p[TAIL]原本指向的对象obj[T]。
进一步地,交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]对象的pos值,包括:
交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]的pos值,最终形成p[N]与obj[T],以及p[TAIL]与obj[M]的相互映射关系,将释放p[N]操作转换为释放p[TAIL]操作。
进一步地,对象实体数组obj[size]中每个对象实体与对象指针数组p[size]中的各个指针一一映射,并且对象指针数组p[size]的使用区间是连续的。
有益效果:
1、本发明相比于现有单进单出无锁队列,它多具备了“支持异步无锁/同步随机取出”、“已分配区间即队列”和“空闲对象无须查找”三个特点。
2、本发明将现有单进单出无锁队列的应用场景扩展到“网络会话管理”这类需求,并且还具有性能优势。
附图说明
图1是单进单出无锁队列示意图;
图2是现有单进单出无锁队列示意图;
图3是本发明一实施例的消费者线程在使用区间执行随机取出的流程示意图;
图4是本发明一实施例的对象池的内存布局示意图;
图5是本发明一实施例的对象指针与对象实体的相互映射关系示意图;
图6是本发明一实施例的对象指针数组的区间划分示意图;
图7是本发明一实施例的执行释放操作前的使用区间状态示意图;
图8是本发明一实施例的交换p[N]指针与p[TAIL]指针的值的示意图;
图9是本发明一实施例的交换obj[M]与obj[T]对象的pos值的示意图;
图10是网络流量的处理场景中的流量处理结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神,应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种基于单进单出无锁队列的随机取出对象的方法,在对象池被使用一段时间后,对象实体数组obj[size]中的对象实体,总是保持与对象指针数组p[size]中的对象指针一一映射,并且对象指针数组p[size]的使用区间总是连续的。其间,生产者线程与消费者线程竞争情形包括:
(1)使用区间为空时
基于单进单出无锁队列随机取出对象,保证消费者线程取出失败,避免取出无效对象。
(2)使用区间为满时
基于单进单出无锁队列的随机取出对象,保证生产者线程添加失败,避免与已满的使用区间冲突。
(3)消费者线程正在使用区间执行随机取出,生产者线程异步执行,如图3所示:
假设,消费者线程开始执行取出操作时,使用区间为[HEAD,TAIL]:
如果取出操作开始到结束期间,生产者线程未异步添加对象,使用区间始终为[HEAD,TAIL],不会被生产者线程操作;
如果取出操作开始到结束期间,生产者线程异步添加过对象,使用区间扩展到[HEAD’,TAIL],[HEAD,TAIL]区间则为[HEAD’,TAIL]区间的子集,也不会被生产者线程操作。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
本发明提出一种可以从[HEAD,TAIL]区间随机取出对象的方法,具体如下:
1、对size大小的对象池,按照如下方式进行内存布局,如图4所示:
(1)对象池前面部分为对象指针数组p[size],后面部分为对象实体数组obj[size];
(2)初始化时,设置对象指针数组p[size]中的各个对象指针,指向对象实体数组obj[size]中对应下标处的对象;
(3)让对象实体数组obj[size]中的每个对象实体携带一个隐式尾部pos,用于存储指向该对象的指针在对象指针数组p[size]中的下标值,使得对象池刚建立时,对象指针数组p[size]中的各个对象指针与对象实体数组obj[size]中的各个对象实体的相互映射关系如图5所示;
(4)将对象指针数组p[size]实现为无锁环形队列。
2、将对象指针数组p[size]划分为使用区间和空闲区间:[HEAD,TAIL]为使用区间,指向生产者线程添加且未被消费者线程取出的对象,其余部分为空闲区间,指向空闲对象,如图6所示。
3、消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并在使用完毕之后释放:
(1)执行释放操作前的使用区间状态
将p[N]此时指向的对象记作obj[M](M不一定等于N),将p[TAIL]此时指向的对象记作obj[T](T不一定等于TAIL),并且消费者线程此时只有p[N]指针的值(即obj[M]的地址),没有p[N]指针本身的地址,但可以通过obj[M].pos获取N值,如图7所示;
(2)swap(p[N],p[TAIL])
交换p[N]指针与p[TAIL]指针的值,使p[TAIL]指向期望释放的对象obj[M],p[N]指向p[TAIL]原本指向的对象obj[T],如图8所示;
(3)swap(obj[M].pos,obj[TAIL].pos)
交换obj[M]与obj[T]对象的pos值,最终形成p[N]与obj[T],以及p[TAIL]与obj[M]的相互映射关系,将释放p[N]操作转换为释放p[TAIL]操作,从而满足现有单进单出无锁队列的取出要求,如图9所示。
在满足现有单进单出无锁队列的取出要求后,取出对象原来的位置N,在[HEAD,TAIL)区间,经过转换后,换到了位置TAIL,从而转变成现有单进单出无锁队列的取出操作(TAIL往HEAD方向移动一格,即可取出对象)。
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本发明提出的基于单进单出无锁队列的随机取出对象的方法,其优势如下:
1、相比于多进多出无锁队列,最底层不依赖CAS指令,性能更高。
比如,网络流量的处理场景中,经常使用如图10所示的结构,接收核接收到报文后,将后续的处理分发给处理核处理,接收核本身就可以快速接收下一个报文,从而避免大流量时网卡缓冲区溢出导致的丢包。在这个结构中,接收核与每个处理核之间,就可以使用单进单出无锁队列,相比于多进多出无锁队列,最底层不依赖CAS指令,性能更高。
2、基于单进单出无锁队列实现对象查询表,相比于现有实现方案,性能更高。
比如,会话表管理使用单进单出无锁队列实现,其优势在于:整个环形数组相当于一个内存池,空闲区间即为内存池空闲部分,而使用区间既是内存池已分配部分,同时又是会话表;一方面,从会话表删除会话的同时,也完成了向内存池释放的操作,从内存池分配的同时,也完成了向会话表插入的操作;另一方面,下次分配会话总是固定从空闲区间尾部分配,相比于现有很多内存池算法,避免了分配时查找空闲会话位置的过程。这两个特点即使在同步删除的应用场景中,也是有性能优势的,同时也不影响它仍然支持异步删除。
为了让单进单出无锁队列可以用于会话表管理,必须使它支持随机删除,原因在于:新建会话是向使用区间头部添加,而删除几乎不可能与新建保持顺序一致,因为老化依据的是会话最后活跃时间,而不是新建时间。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包含的各种修改和等同布置。
对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (10)
1.一种基于单进单出无锁队列的随机取出对象的方法,其特征在于,该方法包括:
对size大小的对象池进行内存布局;
将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间;
消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放。
2.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,对size大小的对象池进行内存布局,包括:
对象池前面部分为对象指针数组p[size],后面部分为对象实体数组obj[size];
设置对象指针数组p[size]中的各个指针指向;
设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向;
将对象指针数组p[size]实现为无锁环形队列。
3.根据权利要求2所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,设置对象指针数组p[size]中的各个指针指向,包括:
设置对象指针数组p[size]中的各个指针,指向对象实体数组obj[size]中对应下标处的对象。
4.根据权利要求2所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,设置对象实体数组obj[size]中每个对象实体携带的隐式尾部pos指向,包括:
让对象实体数组obj[size]中每个对象实体携带一个隐式尾部pos,用于存储指向该对象的指针,在对象指针数组p[size]中的下标值,使得对象池刚建立时,形成对象指针与对象实体的相互映射关系。
5.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,将对象指针数组p[size]划分为使用区间[HEAD,TAIL]和空闲区间,包括:
[HEAD,TAIL]为使用区间,指向生产者线程添加且未被消费者线程取出的对象,其余部分为空闲区间,指向空闲对象。
6.根据权利要求1所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,消费者线程取出p[N]指向的对象(N∈[HEAD,TAIL]),并且在使用完毕之后释放,包括:
执行释放操作前的使用区间状态;
交换p[N]与p[TAIL]的值;
交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]对象的pos值。
7.根据权利要求6所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,执行释放操作前的使用区间状态,包括:
将p[N]此时指向的对象记作obj[M],将p[TAIL]此时指向的对象记作obj[T],并消费者线程此时只有p[N]的值,没有p[N]本身的地址,通过obj[M].pos即可获取N值。
8.根据权利要求6所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,交换p[N]与p[TAIL]的值,包括:
交换p[N]与p[TAIL]的值,使p[TAIL]指向期望释放的对象obj[M],p[N]指向p[TAIL]原本指向的对象obj[T]。
9.根据权利要求6所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]对象的pos值,包括:
交换p[N]此时指向的对象obj[M]与p[TAIL]此时指向的对象obj[T]的pos值,最终形成p[N]与obj[T],以及p[TAIL]与obj[M]的相互映射关系,将释放p[N]操作转换为释放p[TAIL]操作。
10.根据权利要求2所述的基于单进单出无锁队列的随机取出对象的方法,其特征在于,所述对象实体数组obj[size]中每个对象实体与对象指针数组p[size]中的各个指针一一映射,并且对象指针数组p[size]的使用区间是连续的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110294432.8A CN113176896B (zh) | 2021-03-19 | 2021-03-19 | 一种基于单进单出无锁队列的随机取出对象的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110294432.8A CN113176896B (zh) | 2021-03-19 | 2021-03-19 | 一种基于单进单出无锁队列的随机取出对象的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113176896A true CN113176896A (zh) | 2021-07-27 |
CN113176896B CN113176896B (zh) | 2022-12-13 |
Family
ID=76922713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110294432.8A Active CN113176896B (zh) | 2021-03-19 | 2021-03-19 | 一种基于单进单出无锁队列的随机取出对象的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113176896B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377549A (zh) * | 2021-08-12 | 2021-09-10 | 浙江齐安信息科技有限公司 | 一种队列数据控制方法、系统及队列数据结构 |
Citations (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1339743A (zh) * | 2000-08-23 | 2002-03-13 | 国际商业机器公司 | 用于计算机软件分析的方法和装置 |
CN1514354A (zh) * | 2002-12-31 | 2004-07-21 | ����̩ƽ | 面向构件基于系统内核的进程池/线程池管理方法 |
US20060123156A1 (en) * | 2002-01-11 | 2006-06-08 | Sun Microsystems, Inc. | Scalable method for producer and consumer elimination |
US20070169123A1 (en) * | 2005-12-30 | 2007-07-19 | Level 3 Communications, Inc. | Lock-Free Dual Queue with Condition Synchronization and Time-Outs |
US7533221B1 (en) * | 2004-12-30 | 2009-05-12 | Sun Microsystems, Inc. | Space-adaptive lock-free free-list using pointer-sized single-target synchronization |
US7836228B1 (en) * | 2004-06-18 | 2010-11-16 | Oracle America, Inc. | Scalable and lock-free first-in-first-out queue implementation |
US20110145835A1 (en) * | 2009-12-14 | 2011-06-16 | Verisign, Inc. | Lockless Queues |
CN103488717A (zh) * | 2013-09-11 | 2014-01-01 | 北京华胜天成科技股份有限公司 | 一种无锁数据汇聚方法及装置 |
CN103703449A (zh) * | 2011-08-04 | 2014-04-02 | 英特尔公司 | 存储器合并的计算机实现方法、系统以及装置 |
CN104077113A (zh) * | 2014-07-10 | 2014-10-01 | 中船重工(武汉)凌久电子有限责任公司 | 一种无锁并发消息处理机制的实现方法 |
CN104168217A (zh) * | 2014-08-15 | 2014-11-26 | 杭州华三通信技术有限公司 | 一种先入先出队列调度方法及装置 |
CN104615445A (zh) * | 2015-03-02 | 2015-05-13 | 长沙新弘软件有限公司 | 一种基于原子操作的设备io队列方法 |
CN104809027A (zh) * | 2015-04-21 | 2015-07-29 | 浙江大学 | 一种基于无锁缓冲区的数据采集方法 |
CN104978321A (zh) * | 2014-04-02 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 构造数据队列的方法、装置及从其插入和消费对象的方法 |
CN106648461A (zh) * | 2016-11-15 | 2017-05-10 | 努比亚技术有限公司 | 一种内存管理装置和方法 |
CN108509186A (zh) * | 2018-02-28 | 2018-09-07 | 南京邮电大学 | 一种队列cas原子操作控制方法 |
CN109408239A (zh) * | 2018-10-31 | 2019-03-01 | 长沙新弘软件有限公司 | 一种基于队列的异步io处理方法 |
CN110109677A (zh) * | 2019-05-07 | 2019-08-09 | 北京善讯互动科技有限公司 | 一种动态对象缓存池分配方法 |
CN110134439A (zh) * | 2019-03-30 | 2019-08-16 | 北京百卓网络技术有限公司 | 无锁化的数据结构构建方法和写入数据、读取数据的方法 |
CN110597606A (zh) * | 2019-08-13 | 2019-12-20 | 中国电子科技集团公司第二十八研究所 | 一种高速缓存友好的用户级线程调度方法 |
CN110888727A (zh) * | 2019-11-26 | 2020-03-17 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
CN111049729A (zh) * | 2019-11-29 | 2020-04-21 | 苏州浪潮智能科技有限公司 | 一种持久化消息传输方法与装置 |
CN111143079A (zh) * | 2019-12-24 | 2020-05-12 | 浪潮软件股份有限公司 | 一种多读多写无锁队列实现方法 |
CN111416825A (zh) * | 2020-03-24 | 2020-07-14 | 河南信大网御科技有限公司 | 线程间无锁日志管理方法和系统、终端、存储介质 |
CN111459400A (zh) * | 2019-01-18 | 2020-07-28 | 香港商希瑞科技股份有限公司 | 在存储服务器中进行基于管线的存取管理的方法及设备 |
CN111459417A (zh) * | 2020-04-26 | 2020-07-28 | 中国人民解放军国防科技大学 | 一种面向NVMeoF存储网络的无锁传输方法及系统 |
CN111475300A (zh) * | 2020-04-09 | 2020-07-31 | 江苏盛海智能科技有限公司 | 一种多线程多任务管理方法及终端 |
CN111782425A (zh) * | 2020-07-07 | 2020-10-16 | 北京无线电测量研究所 | 基于索引队列的任务间通信方法、装置、计算机设备 |
CN111813517A (zh) * | 2020-06-29 | 2020-10-23 | 中国平安人寿保险股份有限公司 | 任务队列的分配方法、装置、计算机设备及介质 |
CN112346848A (zh) * | 2019-08-09 | 2021-02-09 | 中兴通讯股份有限公司 | 一种管理内存池的方法、装置及终端 |
CN112506683A (zh) * | 2021-01-29 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 一种数据处理的方法、相关装置、设备以及存储介质 |
-
2021
- 2021-03-19 CN CN202110294432.8A patent/CN113176896B/zh active Active
Patent Citations (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1339743A (zh) * | 2000-08-23 | 2002-03-13 | 国际商业机器公司 | 用于计算机软件分析的方法和装置 |
US20060123156A1 (en) * | 2002-01-11 | 2006-06-08 | Sun Microsystems, Inc. | Scalable method for producer and consumer elimination |
CN1514354A (zh) * | 2002-12-31 | 2004-07-21 | ����̩ƽ | 面向构件基于系统内核的进程池/线程池管理方法 |
US7836228B1 (en) * | 2004-06-18 | 2010-11-16 | Oracle America, Inc. | Scalable and lock-free first-in-first-out queue implementation |
US7533221B1 (en) * | 2004-12-30 | 2009-05-12 | Sun Microsystems, Inc. | Space-adaptive lock-free free-list using pointer-sized single-target synchronization |
US20070169123A1 (en) * | 2005-12-30 | 2007-07-19 | Level 3 Communications, Inc. | Lock-Free Dual Queue with Condition Synchronization and Time-Outs |
US20110145835A1 (en) * | 2009-12-14 | 2011-06-16 | Verisign, Inc. | Lockless Queues |
CN103703449A (zh) * | 2011-08-04 | 2014-04-02 | 英特尔公司 | 存储器合并的计算机实现方法、系统以及装置 |
CN103488717A (zh) * | 2013-09-11 | 2014-01-01 | 北京华胜天成科技股份有限公司 | 一种无锁数据汇聚方法及装置 |
CN104978321A (zh) * | 2014-04-02 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 构造数据队列的方法、装置及从其插入和消费对象的方法 |
CN104077113A (zh) * | 2014-07-10 | 2014-10-01 | 中船重工(武汉)凌久电子有限责任公司 | 一种无锁并发消息处理机制的实现方法 |
CN104168217A (zh) * | 2014-08-15 | 2014-11-26 | 杭州华三通信技术有限公司 | 一种先入先出队列调度方法及装置 |
CN104615445A (zh) * | 2015-03-02 | 2015-05-13 | 长沙新弘软件有限公司 | 一种基于原子操作的设备io队列方法 |
CN104809027A (zh) * | 2015-04-21 | 2015-07-29 | 浙江大学 | 一种基于无锁缓冲区的数据采集方法 |
CN106648461A (zh) * | 2016-11-15 | 2017-05-10 | 努比亚技术有限公司 | 一种内存管理装置和方法 |
CN108509186A (zh) * | 2018-02-28 | 2018-09-07 | 南京邮电大学 | 一种队列cas原子操作控制方法 |
CN109408239A (zh) * | 2018-10-31 | 2019-03-01 | 长沙新弘软件有限公司 | 一种基于队列的异步io处理方法 |
CN111459400A (zh) * | 2019-01-18 | 2020-07-28 | 香港商希瑞科技股份有限公司 | 在存储服务器中进行基于管线的存取管理的方法及设备 |
CN110134439A (zh) * | 2019-03-30 | 2019-08-16 | 北京百卓网络技术有限公司 | 无锁化的数据结构构建方法和写入数据、读取数据的方法 |
CN110109677A (zh) * | 2019-05-07 | 2019-08-09 | 北京善讯互动科技有限公司 | 一种动态对象缓存池分配方法 |
CN112346848A (zh) * | 2019-08-09 | 2021-02-09 | 中兴通讯股份有限公司 | 一种管理内存池的方法、装置及终端 |
CN110597606A (zh) * | 2019-08-13 | 2019-12-20 | 中国电子科技集团公司第二十八研究所 | 一种高速缓存友好的用户级线程调度方法 |
CN110888727A (zh) * | 2019-11-26 | 2020-03-17 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
CN111049729A (zh) * | 2019-11-29 | 2020-04-21 | 苏州浪潮智能科技有限公司 | 一种持久化消息传输方法与装置 |
CN111143079A (zh) * | 2019-12-24 | 2020-05-12 | 浪潮软件股份有限公司 | 一种多读多写无锁队列实现方法 |
CN111416825A (zh) * | 2020-03-24 | 2020-07-14 | 河南信大网御科技有限公司 | 线程间无锁日志管理方法和系统、终端、存储介质 |
CN111475300A (zh) * | 2020-04-09 | 2020-07-31 | 江苏盛海智能科技有限公司 | 一种多线程多任务管理方法及终端 |
CN111459417A (zh) * | 2020-04-26 | 2020-07-28 | 中国人民解放军国防科技大学 | 一种面向NVMeoF存储网络的无锁传输方法及系统 |
CN111813517A (zh) * | 2020-06-29 | 2020-10-23 | 中国平安人寿保险股份有限公司 | 任务队列的分配方法、装置、计算机设备及介质 |
CN111782425A (zh) * | 2020-07-07 | 2020-10-16 | 北京无线电测量研究所 | 基于索引队列的任务间通信方法、装置、计算机设备 |
CN112506683A (zh) * | 2021-01-29 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 一种数据处理的方法、相关装置、设备以及存储介质 |
Non-Patent Citations (4)
Title |
---|
徐延东等: "面向GPU的内存管理与应用", 《电子技术》 * |
王俊昌等: "基于无锁数据结构的FIFO队列算法", 《计算机工程》 * |
白正等: "基于无锁队列算法的报文分发流水线模型", 《网络安全技术与应用》 * |
高志民等: "面向并行安全网关流水线模型的无锁队列算法", 《北京交通大学学报》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377549A (zh) * | 2021-08-12 | 2021-09-10 | 浙江齐安信息科技有限公司 | 一种队列数据控制方法、系统及队列数据结构 |
Also Published As
Publication number | Publication date |
---|---|
CN113176896B (zh) | 2022-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103999051B (zh) | 用于着色器核心中着色器资源分配的策略 | |
US9842069B2 (en) | Hardware accelerator and chip | |
WO2019223596A1 (zh) | 事件处理方法、装置、设备及存储介质 | |
US20130212594A1 (en) | Method of optimizing performance of hierarchical multi-core processor and multi-core processor system for performing the method | |
CN104731569B (zh) | 一种数据处理方法及相关设备 | |
US20110161965A1 (en) | Job allocation method and apparatus for a multi-core processor | |
CN113312278B (zh) | 一种静态可分配共享多队列缓存的装置及方法 | |
US9043806B2 (en) | Information processing device and task switching method | |
JP2012512452A (ja) | マルチプロセス間のバリアの物理マネージャ | |
CN112491426B (zh) | 面向多核dsp的服务组件通信架构及任务调度、数据交互方法 | |
CN113176896B (zh) | 一种基于单进单出无锁队列的随机取出对象的方法 | |
CN103019859A (zh) | 一种对服务请求调度的方法和系统 | |
CN106325996B (zh) | 一种gpu资源的分配方法及系统 | |
US20180108109A1 (en) | Gpu resource allocation method and system | |
JP2021530022A (ja) | Gpu主導の通信のためのネットワークパケットテンプレーティング | |
CN114490439A (zh) | 基于无锁环形共享内存的数据写入、读取、通信方法 | |
CN109298888B (zh) | 队列的数据存取方法及装置 | |
WO2022160628A1 (zh) | 命令处理装置、方法、电子设备以及计算机可读存储介质 | |
CN112506431B (zh) | 基于磁盘设备属性的i/o指令调度方法及装置 | |
CN107391253B (zh) | 一种降低系统内存分配释放冲突的方法 | |
CN111984198A (zh) | 消息队列实现方法、装置及电子设备 | |
CN115755785A (zh) | 一种基于多级动态优先级的自主任务调度方法及系统 | |
US8428075B1 (en) | System and method for efficient shared buffer management | |
CN113419871B (zh) | 基于同步槽的对象处理方法及相关产品 | |
WO2012127534A1 (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 | ||
CP02 | Change in the address of a patent holder |
Address after: 200000 room 702-2, No. 4811 Cao'an Road, Jiading District, Shanghai Patentee after: CHINA UNITECHS Address before: Room 1004-4, 10 / F, 1112 Hanggui Road, Anting Town, Jiading District, Shanghai Patentee before: CHINA UNITECHS |
|
CP02 | Change in the address of a patent holder |