CN103262030B - 经由动态聚合操作的快速且线性化并发优先级队列 - Google Patents
经由动态聚合操作的快速且线性化并发优先级队列 Download PDFInfo
- Publication number
- CN103262030B CN103262030B CN201180059844.8A CN201180059844A CN103262030B CN 103262030 B CN103262030 B CN 103262030B CN 201180059844 A CN201180059844 A CN 201180059844A CN 103262030 B CN103262030 B CN 103262030B
- Authority
- CN
- China
- Prior art keywords
- temporary table
- thread
- handling procedure
- running node
- priority query
- 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.)
- Expired - Fee Related
Links
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明的实施例通过串行化并发优先级队列操作来提高吞吐量从而改善了多线程应用的并行性能。一个实施例使用同步协议和聚合技术,其使得单个线程能够以高速缓存友好的方式处理多个操作,同时等待这些操作完成的线程自旋等待局部堆栈变量,即线程继续轮询堆栈变量直到其被适当地设置或清除,而不是依赖于中断通知。用于入队/出队(推入/弹出)优化的技术使用聚合操作的重新排序,以使能在一些情况下以一个操作的代价执行两个操作。描述并要求保护其它实施例。
Description
技术领域
本发明的实施例一般涉及计算系统中并发实体的动态聚合和优化,更具体而言,涉及动态聚合操作以用可扩展和线性化方式并发地加速访问和修改列表、优先级队列或者其它并发实体,以及使用列表来优化例如优先级队列的并发实体上的操作。
背景技术
存在各种机制用于访问和修改优先级队列。优先级队列是改进的队列构造。例如,在先进先出(FIFO)队列中,放置于队列上的第一个元素(入队或推入)是第一个被移除(出队或弹出)的。在优先级队列中,待被移除(弹出)的第一个元素是当时队列中具有最高优先级的元素。因此,优先级队列可以具有基于用户定义的那些元素的优先级而对元素进行有序出队的基本表示。
优先级队列通常用于存储多线程计算系统中的信息或任务。然而,在多线程系统中,在同一时间可能会有多于一个的线程尝试访问队列。因此,现有的系统可以实施一系列锁定算法来确保对于添加和移除项目不会存在竞争,并维持优先级队列的基本表示。通常以堆数据结构来维持优先级队列,以便于定位最高优先级元素并在自堆添加和移除之后进行重构。
用于实现并发优先级队列的多种方法是基于互斥(锁定)的。然而,互斥算法会引起阻塞,这可能会降低系统的整个性能。此外,线程锁定典型地仅允许一次有一个线程操作,这将使得该方法降低为串行性能方法并且增加了锁定开销。在一些情况下,该方法的开销将导致比串行性能更糟。另一种方案是一些算法试图在队列自身内并发执行。在这种情况下,多个线程同时对队列进行操作,从而必须保护对队列的每个元素的访问。这可以使用内部锁定或其它系统来防止对具体队列元素的竞争。这种算法改善了并发性,但是多个这种算法则会太复杂并且因内部锁定而承担较高的开销,从而在实践中表现并不良好。
附图说明
根据以下本发明的详细描述,本发明的特征和优点将变得清晰,其中:
图1图示出根据本发明实施例的将项目放置于优先级队列上的示例性挂起操作列表(pending_opertaionlist)的表示,还示出了等待挂起操作列表中的操作的三个线程的时间线;
图2图示出根据本发明实施例的保持优先级队列的数组,以及优先级队列的基础堆表示如何映射到数组;
图3图示出根据本发明实施例的具有堆排序项目和未排序项目的优先级队列的表示;
图4-8示出了根据本发明实施例的由处理程序(handler)在并发优先级队列上执行入队和出队操作的例子;
图9为根据本发明实施例的示例性出队列表或弹出列表(pop_list)的图示;
图10为图示出根据本发明实施例的用于集成同步和聚合以及用于向并发优先级队列推入/从其弹出项目的入队/出队优化的方法的流程图;
图11示出了与基准度量相比用于本发明实施例的各种吞吐量测量;
图12为可以实施本发明实施例的示例性计算系统的框图。
具体实施方式
本发明的实施例通过以改善吞吐量的方式串行化并发优先级队列操作而改善了并行性能。可以理解的是,虽然使用优先级队列阐示本发明的示例性实施例,但是也可以在其它类型的并发实体或者并发数据结构上操作其它实施例。一个实施例具有两个部件:(1)同步协议和聚合技术,其使得单个线程能够以高速缓存友好的方式处理多个操作,同时等待这些操作完成的线程自旋等待(spin-wait)局部堆栈变量,即线程继续轮询堆栈变量直到其被适当地设置或清除,而不是依赖于中断通知;以及(2)入队/出队(推入/弹出)优化,其使用聚合操作的重新排序,以使能以一个操作的代价执行两个操作。
在本发明的说明书中对“一个实施例”或“一实施例”的引用指的是,关于实施例描述的特定特征、结构或特性包含于本发明的至少一个实施例中。因此,出现在整个说明书各处的短语“在一个实施例中”并不必都指的是同一实施例。
出于解释的目的,阐述了具体的配置和细节以便提供对本发明的透彻理解。然而,对于本领域普通技术人员而言,显然可以不用本文所呈现的具体细节而实践本发明的实施例。此外,将对公知的特征进行省略或简化,从而不会模糊本发明。贯穿本说明书将给出多个例子。这些仅是对本发明的具体实施例的描述。本发明的范围并不局限于给出的例子。
在示例性系统中,使用优先级队列来调度用于图形用户界面(GUI)的图形操作。在GUI系统中,可能存在来自各种来源的大量输入。一些输入可能比其它输入更重要。输入或者期望的操作被接收,并且执行所述操作的过程将项目以优先级顺序放置入队列中,并按照优先级处理它们。
在另一示例性系统中,可将优先级队列用于并行离散事件模拟。对网络流量建模即是该类模拟的例子。在该类型的应用中,优先级可以是事件必须发生时的时间戳。本领域技术人员可以理解的是,优先级队列可以实现在多种应用中,并且优化队列操作可以导致系统性能的显著增强。
可以理解的是,本发明的实施例可以用于多种应用。可以在各过程中生成/接收优先级队列输入,接着所述过程将输入放置到队列中。可以理解的是,本发明的实施例与多个过程一起操作并发地添加项目到一个队列。一个或多个其它过程并发地从优先级队列移除项目以对其进行处理。经由限定的推入/入队和弹出/出队操作,队列自身将输入组织到一些内部数据结构中并通过按照优先级顺序移除项目来回答对项目的请求。
本发明的一个实施例集成两个部件(同步和聚合;以及入队/出队优化),以提供系统用于维护最小化高速缓存缺失且加速优先级队列的堆分类的并发优先级队列。每个部件利用具体的数据结构和技术来辅助实现。在示例性实施例中,可以使用如下限定的术语或结构,虽然对本领域的技术人员而言显然可以使用替换的数据结构同时仍享有本发明实施例的优点。
·挂起操作列表:指向待由线程执行的操作(例如,在并发优先级队列
的情况下的推入和弹出)的链接列表的指针
·op_list:当处理程序线程控制列表而对优先级队列执行挂起操作时指向原始挂起操作列表的指针
·优先级队列:存储推入到并发优先级队列中的项目的实际内部数据结构。该数据结构可以是以堆表示的数组,其中最高优先级的项目在该数组的前面(即,堆的顶部)。
·活动处理程序:将项目放置在挂起操作列表上的第一线程在所述列表准备行动时变为活动处理程序。
·等待处理程序:当线程是第一个将项目放置到挂起操作列表上时,其变为等待处理程序,等待标志(处理程序忙标志)被重置为“假”。
·cpq_operation:待放置到挂起操作列表上的线程操作或者操作节点,表示待应用到优先级队列的操作(例如,推入或弹出)。
·处理程序忙标志:当等待处理程序变为活动处理程序时,将该标志设置为“真”,以防止另一线程试图变为处理程序。当活动处理程序结束所委派的任务时,将该标志重置为“假”,并且恢复正常操作。
·弹出列表:表示仅对优先级队列施加出队操作的cpq_operation的列表。
·比较并交换(CAS):在本发明的实施例中用于当多个线程试图同时修改链接列表时将项目放置入该列表中的原子操作。该指令的原子性免除了锁定列表免于其它线程操作的需要。
·获取并存储:在本发明的实施例中用于抓取列表并以空列表进行替换的原子操作,通常是通过改变指向列表的指针实现的。
实施例的同步和聚合部件使用处理程序忙标志、挂起操作列表和op_list。对优先级队列的操作将结合第二部件进行讨论。可以理解的是,如此处所讨论的,每个部件可以在系统中实现而不用实现另一部件,例如,所述部件可以是孤立的。然而,本发明的实施例可以以集成方式使用两个部件。
本发明的实施例允许每个线程通过使用列表(本文中已知为挂起操作列表)来调度其推入和弹出操作。虽然术语推入和弹出有时表示堆栈数据结构(LIFO),但是本文所使用的术语是与“入队”和“出队”同义的,并且是为了简化而使用的。这些操作存储于挂起操作列表中,并随后由处理程序线程在表示优先级队列的内部数据结构上执行,并且请求队列操作的线程等待直到其接收到已经完成其操作的通知。因此,由于只有一个线程处理挂起操作来修改内部优先级队列,所以不需要锁定机制来防止对内部优先级队列的线程竞争。由于处理程序执行操作并通知等待线程其操作已经完成,所以线程可以继续以请求对并发优先级队列的另一操作。然而,该新操作将被放置在下一挂起操作列表上,而不是当前正操作的列表(op_list),这是因为一旦处理程序控制了挂起操作列表,将会自动获取列表(获取并存储)到op_list,并且将空指针存储到挂起操作(表示所述列表是空的)用于后续线程向其添加操作。以这种方式依次对每个挂起操作列表进行处理,存储在op-list内的每个实例包含不超过P个操作,其中P为运行的线程的数目。因此,在其操作被完成之前没有线程必须等待多于P个操作。
因为在能调度另一操作之前每个线程需等待直到其操作完成,所以可能每次只有总共P个未完成的操作,并且只有两个必要的列表:处理程序线程正在操作的活动列表(op_list),以及线程继续添加项目的等待列表(挂起操作)。例如,活动列表可以具有n个项目,其中0≤n≤P,并且等待列表可以具有m个项目,其中0≤m≤P-n。
现在参照图1,其示出了具有将被放置到优先级队列中的项目的示例性挂起操作列表的表示。可以理解的是,项目推入和弹出可以分别与项目入队和出队互换使用,而不会丧失本文所描述的普遍性和特殊性。在本发明的一个实施例中,可以使用挂起操作列表。当线程试图使项目向优先级队列入队或从其出队时,它们反而将期望操作的记录添加到挂起操作列表。
在该例子中,存在三个线程T1(101)、T2(102)和T3(103)。可以理解的是,在同一时间可以有1至P个线程在操作。在必要时,每个线程将添加操作到挂起操作列表110。然而,线程可以仅添加一个操作到列表,这是因为线程随后将进入自旋等待直到所述操作实际在优先级队列中执行。线程可以试图并发地将推入和弹出操作插入到挂起操作列表110。在一个实施例中,在列表上的操作是并发优先级队列操作,或者cpq_operation。为添加操作到列表,使用原子的比较并交换(CAS)来进入列表。所述列表典型地为链接列表。线程使用原子的CAS操作来将cpq_operation或操作节点添加到列表110,以便确保另一线程在准备将其操作添加到列表的同时没有修改列表指针。随后将待添加到列表中的操作添加到挂起操作列表的前部。如果CAS操作失败,则意味着另一线程首先将项目添加到列表,并且现在下一指针不同。在这种情况下,线程将重建其操作节点中的指针并再次尝试CAS,直到已经成功地将操作添加到列表。
在本发明的实施例中,将cpq_operation放置到挂起操作列表上的第一线程成为用于所述列表的处理程序。将操作节点放置到列表上的其它线程在被允许继续正常操作之前将等待就绪标志。在该例子中,T1101将项目42推入到优先级队列。T2102想要从优先级队列弹出项目,而T3103将项目27推入到优先级队列。在图1的例子中,线程T2102首先成功地将操作添加到挂起操作110(其下一指针为空),因而T2将最终成为用于挂起操作列表的处理程序。
根据本发明的实施例,在某一时刻,至多有一个活动处理程序(处理op_list)和至多一个等待处理程序(等待处理挂起操作)。等待处理程序自旋等待全局处理程序忙标志。当处理程序忙标志变为“假”时,等待处理程序将标志设置为“真”并且成为活动处理程序。然后活动处理程序使用获取并存储来移动挂起操作到op_list。当活动处理程序结束op_list上的处理操作(将在下文更全面地阐述)时,将处理程序忙设置为“假”。当处理程序变为活动时,原子地将op_list指向挂起操作列表并将挂起操作指向空值,从而添加随后的操作形成新的列表。可以理解的是,这些抓取和替换操作可以通过改变识别各个列表的指针来执行,并且这些列表的元素不必完全复制到新的列表。op_list表示在待以优化方式串行处理的优先级队列上执行的并发操作的聚合。如以下对于入队/出队优化部件所讨论的,活动处理程序将执行op_list中的操作,并且待由等待处理程序处理的新操作被放入到新的挂起操作列表中。
在实施例中,如图2所示,优先级队列由基于数组的堆表示。在该实施例中,队列存储为数组201,其中数字指示数组中的位置。优先级队列呈现为堆203,其中方框中的数字对应于数组201中的项目位置。可以理解的是,存在利用计算科学中可用的数据结构实现队列和堆的多种方法。此处的描述意在阐示而非限制部署和实现。在实施例中,存储在数组中的优先级队列使维护平衡堆的需要成为必需。因此,在对堆进行再排序之前(也称为堆排序),将项目推入到堆的底部有助于维持平衡。虽然在一些实现中可以将堆存储在链接列表中,但是将堆存储在数组中会产生较小的开销。
现在参照图3,示出了根据本发明实施例的优先级队列300的表示。在该队列中,存在已排序到优化堆301中的项目,以及已被推入队列上但还未排序的未排序项目303。队列的各个项目被识别为例如顶部311、用于未排序项目的开始的标记313、队列的大小315以及队列的容量317。在现有系统中,项目通常在被放置到优先级队列时立即排序,这对于添加到堆的每个项目需要O(logn)次操作,其中logn是堆的高度,而n是堆中项目的数目。然而,本发明的实施例通过延后某些项目303的排序而优化队列上的排序操作。
活动处理程序依次检查op_list中等待线程的每个cpq_operation。当所述操作为推入或入队时,在O(1)时将待推入的项目从操作节点拷贝到未排序区域303中堆的末端。在队列需要调整大小的不频发事件中,例如,当通过添加元素到队列而超出容量317时,所述时间可能会稍微增加。随后处理程序将为cpq_operation设置就绪标志,其使得等待所述推入操作的线程继续其它工作。
当所述操作为弹出时,处理程序做出两次检查。第一,如果堆301是空的且在未排序段303中没有最近推入的项目,则设置就绪标志以允许线程继续。在一些实现中,就绪标志会返回表示从优先级队列获得项目的弹出操作是成功还是失败的值。第二,如果未排序区域303不为空且如果最后添加的项目(在未排序区域303中)具有比堆311的顶部高的优先级(假设堆301不为空),则返回所述项目,并且为等待线程设置就绪标志。如果堆301为空,则返回最后添加的项目。这种立即弹出未排序列表303中的项目避免了曾经将所述项目排序到堆301中的需要,由此节省了排序堆的操作成本。需要注意的是,在未排序列表中可能存在其它操作节点,这些操作节点具有比最后推入的节点高的优先级,即使所述操作节点具有比顶部节点311高的优先级。然而,未排序列表中的所有项目被假设为并发的,因为它们从不同线程“同时”到达,并且待由单个线程进行处理。因而,仅有所述优先级高于顶部节点,而不是其它未排序节点,这一点是非常重要的。如果上述情况均不存在,那么将cpq_operation留给另一列表(弹出列表,如图9所示),用于稍后从优先级队列出队。弹出列表900仅是一个列表,典型地为链接列表,用于保持那些在常数时间内不能立即处理的弹出操作。由于最多存在P个聚合操作,其中P为线程的数量,所以首先经过op_list将花费O(P)时间。活动处理程序接下来依次重新检查弹出列表中的每个cpq_operation。将做出如上所述的相同检查。
如果堆和未排序项目段都是空的,则设置就绪标志,使得等待弹出/出队操作的线程可以恢复正常执行。如果最后添加的元素(在未排序段中)具有比非空堆的顶部高的优先级,或者堆为空的,则返回所述元素并为等待线程设置就绪标志。如果任一情况均不满足,则返回作为最高优先级的堆的顶部,设置就绪标志,并且将下列之一放置在堆的顶部,并且向下推入到堆中直到处于正确位置:(a)最后添加(未排序)的项目;或者(b)如果没有最近添加的未排序项目,则为堆中最后一个项目。
将新项目推入到堆中需要O(logN)时间。如果能够弹出并以最近添加的项目替换元素,则推入操作最终是免费的,这是因为将未排序项目添加到堆需要O(logN),但是最先将其插入到堆中然后在弹出之后重新排序则需要2*O(logN)。
当从op_list和弹出列表完成到优先级队列的入队或从优先级队列的出队的所有操作,并且除了处理程序外已经释放所有的等待线程时,处理程序将检查优先级队列中任何剩余的未排序的推入项目303。如果存在未排序的项目,则处理程序启动堆化操作以将所述项目合并到堆中,并且适当地对队列排序。到处理程序线程已经结束op_list、弹出列表和优先级队列上的操作时,所有未排序(并发)的项目将要么被排序到优先级队列堆,要么从队列中弹出。
然后重置处理程序忙标志,以允许等待处理程序开始对挂起操作列表(将成为新的op_list)的操作。在同一时间,将由一个处理程序线程处理多达P个操作。只有活动处理程序线程访问优先级队列的堆数据结构以及相关联变量。因此,由于多个线程不在同一时间访问存储器,所以将导致较好的高速缓存特性。
参照图10,为示出根据本发明实施例的同步和聚合以及入队/出队优化的流程图。在实施例中,开始于方框1001,同步和聚合部件、线程在列表上记录入队(推入)或出队(弹出)操作,而不是执行实际并发优先级队列上的操作。如上所述,线程将关于所述操作的信息存储于局部堆栈变量op_info(1003),然后经由在列表头处的原子比较并交换操作为所述信息预先设置指针指向挂起操作列表(1005)。在添加该信息的过程中,线程可能是将信息添加到列表的第一线程,或者列表已经从其它线程处获得关于所述操作的信息。如在方框1007所确定的,如果所述线程不是第一个,则其简单地自旋等待就绪标志(局部堆栈变量op_info中的字段)(1009),直到所述操作完成。然而,如果线程是添加到挂起操作列表的第一个线程,则其成为用于所述列表的操作的处理程序,并且在作用于挂起操作列表中的操作之前等待重置处理程序忙标志(1015)。当处理程序忙标志变为“假”时,其它线程可以继续添加操作到挂起操作列表,直到等待处理程序线程能够开始对列表进行操作。如1009所确定的,当设置非处理程序线程的就绪标志时,其知道其操作已经在优先级队列上执行,并且在1013处从操作返回之前能完成方框1011处操作所需的任意额外工作。
处理程序的责任是处理挂起操作列表上的操作(由op_list指向),并将项目入队到并发优先级队列或从并发优先级队列出队。为此,处理程序通过自旋等待非原子处理程序忙标志而首先确保其是唯一的活动处理程序(1015)。因为每次至多有一个线程活动地处理操作,并且至多有一个线程试图成为处理程序,所以该标志不必是原子的。当处理程序忙标志变为未设置时,或者变为“假”时,在方框1017处下一个等待处理程序设置标志(“真”),且成为活动处理程序。随后,在方框1019,活动处理程序经由获取并存储操作原子地获得挂起操作列表,留下将附加具有随后操作的线程的空列表(空的挂起操作列表)。应该注意的是,将第一项目添加到所述空列表的线程是等待处理程序忙标志变为未设置的下一线程,并且将变为下一活动处理程序。
同时,活动处理程序继续处理挂起操作列表中的操作,现在由op_list指向。开始于方框1021处的循环有效地处理op_list中的每个操作,直到列表中不再有项目。在方框1023处,与入队操作相关联的每条项目放置于优先级队列的末端进入未排序列表中,这将花费常数时间O(1)。如果操作为出队(弹出)操作,则将所述操作添加到弹出列表用于后续处理,除非其能在常数时间内被执行。
如上所述的,优先级队列的基本表示是存储于数组中的堆。单独执行单个入队和出队操作每个需要O(logn)时间,其中n为已在堆中的元素的数目。在实施例中,对聚合操作重新排序,从而首先执行入队操作,然后执行出队操作。对列表每次处理一个操作。通过将新的元素放置在队列的最末端,并且对等待线程设置就绪标志从而其可以恢复执行其它工作,对优先级队列的每个入队操作可以在常数时间内处理。对每个出队操作进行检查,以查看其是否能在常数时间内进行处理:如果优先级队列为空,则操作可能会返回不成功状态;或者,如果新添加的元素还未插入到堆中,则检查最后输入的元素以查看其是否具有比堆的当前顶部更高的优先级(例如,将项目添加到顶部而非底部),如果是,则返回所述元素。对于这些情况,设置就绪标志,从而等待线程能够继续。在大部分情况下,不会发生任一种情况,并且将出队操作留到单独的弹出列表用于后续处理。
在方框1025和1027中,一旦已经检查了op_list内的所有操作并且要么在常数时间内进行了处理要么移动到弹出列表,处理程序解析弹出列表中剩余的出队操作。对于每个出队操作,将堆的当前顶部与优先级队列的堆数组中最后的元素(未排序项目)进行比较。如果最后的元素具有较高的优先级(因为其可能是还未推入到排序堆内的新入队的元素),则简单地该元素将作为出队操作的结果而被返回,并且设置就绪标志。如果堆的顶部具有较高的优先级,则提取并返回顶部元素,并设置就绪标志。然后将列表的未排序部分中最后的元素放置到堆的顶部代替刚移除的项目,然后利用典型的O(logn)堆插入操作向下推入堆直到其处于适当的位置。
在处理程序能够安全地将控制转交给下一处理程序之前,其需要处理在处理弹出列表过程中还未推入到堆中的任意剩余的入队元素。在方框1029处,这些元素被从其底部的当前位置向堆的上方推。该过程也被称为“堆化”,其在O(k+logn)时间内执行,其中k为剩余的入队但未排序元素的数目。
当处理程序结束入队或出队来自原始op_list的所有操作,并且堆化任意剩余未排序项目时,在方框1031,通过未设置处理程序忙标志,所述处理程序将控制转交给等待处理程序,并且循环重复。
在实施例中,入队/出队优化部件限定处理程序如何处理op_list。处理op_list需要O(P)时间,其中P为线程的数目。在从弹出列表已经处理了出队操作(非常数时间)之前,对优先级队列不执行堆排序。因为线程在继续处理之前要等待它们的操作,所以在任何挂起操作列表或者op_list中每线程永远不会存在多于一个的操作。此外,因为每个线程通过至多一个操作呈现在列表中,并且列表表示(几乎)同时的操作,所以可以以任意次序处理操作同时保留算法的线性化。
第一部件的同步机制为特定挂起操作列表中的所有操作提供线性化点—处理程序线程完成捕获挂起操作列表的获取并存储操作的时间。需要注意的是,在不同挂起操作列表中的任意两个操作将具有不同的线性化点;因此,在优先级队列中具有稍后线性化点的操作将利用在前操作的效果而操作。换句话说,两个操作i和j具有线性化点ti和tj,因而具有以下性质:如果ti<tj,则操作j将看到优先级队列上操作i的效果。同一列表内的所有操作以本文所描述的算法所确定的串行次序发生,同时保留可串行化,但是由于它们具有相同的线性化点,所以它们实际上同时发生。
图4-8示出了根据本发明实施例的由处理程序在优先级队列上执行入队和出队操作的例子。现在参照图4,示出了在处理程序开始向优先级队列400入队和从其出队之前处于起始状态的op_list110a。该op_list从获取的挂起操作110处获得。在此时,优先级队列的堆化部分具有五个项目(36、22、32、14和5),而未排序部分403是空的。op_list110a图示了线程T1101将项目42推入到队列,T3103将项目27推入到队列,而T2102用于弹出(具有最高优先级的)项目。
图5图示了T1101的入队操作。处理程序执行T1的推入(42)操作,并将项目42添加到优先级队列400a的未排序部分403a。
图6图示了在T3的项目也已推入到未排序部分403b之后执行T2的弹出操作的处理程序(因为,如上所述,所有的推入操作和常数时间的弹出操作都在非常数时间弹出操作之前处理)。在该例子中,T2的弹出操作不能在常数时间内执行,所以将其添加到弹出列表601用于后续处理。如上所述,处理程序检查以确保在执行弹出/出队之前堆401不是空的。在该例子中,在优先级队列的未排序部分中的最后的项目27具有比队列的顶部处的项目(36)低的优先级。因此,如图7所示,处理程序继续进行堆的顶部项目的出队。项目36被从堆401处移除,并且处理程序设置就绪标志,从而T2可以继续。然后将最后推入的项目27放置在移除了36之处,随后基于401a示出的相对优先级排序到合适的位置。现在未排序列表403c仅保存一个项目42。
在通过处理程序将来自原始op_list的所有项目入队到优先级队列或者从优先级队列出队所述项目之后,如图8所示,对优先级队列中剩余的未排序项目进行堆化。将未排序列表中的项目42插入到堆中,并且按照优先级对整个堆401b进行堆排序。
图11示出了用于本发明实施例的吞吐量,所示为对于每内核单线程和8内核Nehalem(可从英特尔公司获得)上的超线程,用于高、中、低竞争下的简单基准,“优化”与spin-lock-wrappedSTL(C++标准模板库)优先级队列。100%竞争对应于零忙等待时间,每少一百分比将对忙等待时间增加约0.025μs,从而例如,60%对应于1μs。
图12是可以实施本发明实施例的示例性计算系统1200的框图。可以理解的是,可以使用多种计算机结构,而不背离本文所描述的实施例的精神和范围。系统1200描述了具有一个或多个处理器的点对点系统。要求保护的主题可以包括若干实施例,例如,一个具有一个处理器1201,或者具有多个处理器或者多个内核(未示出)的系统。在一个实施例中,每个处理器可以直接耦合到存储器1210,并且经由网络结构连接到每个处理器,所述网络结构可以包括以下任一个或全部:链接层、协议层、路由层、传输层和物理层。所述结构便于点对点网络从一个协议(家庭或高速缓存代理)传输消息到另一个协议。
在另一实施例中,存储器1210可以经由存储器控制设备连接到处理器1201。处理器1201可以经由对应于分层协议方案的网络结构链路耦合到图形和存储器控制(示出为IO+M+F)1203。图形和存储器控制耦合到存储器1210,并能够经由外围部件互连(PCI)高速链路进行接收和传送。同样地,图形和存储器控制1203耦合到输入/输出控制器中心(ICH)1205。此外,ICH1205经由低接脚数(LPC)总线耦合到固件中心(FWH)1207。另外,对于不同处理器实施例,处理器可以具有外部网络结构链路。处理器可以包括具有分离或共享高速缓存的多个内核,每个内核耦合到X形路由器(X-barrouter)和非路由全局链路接口。X形路由器是套接字中内核之间的点对点(pTp)互连。X形是“交叉杆”,意味着每个元件具有与所有其它元件的交叉链路或者连接。这通常比pTp互连链路快,并且在片上实现,提升并行通信。因此,外部网络结构链路耦合到X形路由器以及非路由全局链路接口。
多处理器系统(未示出)的实施例可以包括通过点对点网络互连的多个处理节点。出于讨论的目的,术语“处理节点”和“计算节点”可互换地使用。处理器之间的链路通常是全宽或最大宽度,而从处理器到IO中心(IOH)芯片组(CS)的链路通常是半宽。每个处理节点可以包括一个或多个中央处理器,其耦合到构成系统的主存储器的相关联的存储器。在替换实施例中,存储器可以物理地组合以形成所有处理节点可访问的主存储器。每个处理节点还可以包括存储器控制器以与存储器接口。每个处理节点包括其相关联的存储器控制器可以在同一芯片上实现。在替换实施例中,每个存储器控制器可以与其相关联的处理节点在分离的芯片上实现。
每个存储器1210可以包括一种或多种类型的存储器设备,例如,双列直插式内存模块(DIMM)、动态随机访问存储器(DRAM)设备、同步动态随机存取存储器(SDRAM)设备、双倍数据速率(DDR)SDRAM设备,或者适用于服务器或一般应用的其它易失性或非易失性存储器设备。
系统还可以包括一个或多个输入/输出(I/O)控制器1205,以提供用于处理节点和系统的其它部件的接口,来访问I/O设备,例如闪速存储器或固件中心(FWH)1207。在一个实施例中,每个I/O控制器1205可以耦合到一个或多个处理节点。I/O控制器1205及其相应处理节点1201之间的链路被称作I/O链路。I/O设备可以包括工业标准结构(ISA)设备、外围部件互连(PCI)设备、PCI高速设备、通用串行总线(USB)设备、小型计算机系统接口(SCSI)设备,或者适用于服务器或一般应用的其它标准的或专有的I/O设备。I/O设备可以是有线的或无线的。在一个实施例中,I/O设备可以包括无线发送器和无线收发器。
所述系统可以是服务器、多处理器桌面计算设备、嵌入式系统、网络设备,或分布式计算设备(其中经由广域网远程连接处理节点)。
在一个实施例中,操作系统(OS)1211驻留在存储器1210中,用于在处理器1201上执行。可以理解的是,系统结构可以包括运行单独操作系统的虚拟机或嵌入式执行分区和/或多内核或多处理器系统中的单独的内核或处理器。在任一情况中,OS1211结合多线程应用1213进行操作。在实施例中,多线程应用1213需要使用优先级队列1220用于有效操作。如上所述,多线程应用具有同步和聚合模块1215,用于将基于线程的操作节点(待推入到优先级队列1220或从其弹出的项目)调度到挂起操作列表。一旦将线程指定为用于挂起操作列表的活动处理程序,如上所述,根据挂起操作列表中的项目,活动处理程序将使用入队/出队优化模块1217来优化优先级队列1220的入队和出队操作。
本文所描述的技术不限于任何特定硬件或软件配置;它们可以发现在任何计算、消费电子品或处理环境中的适用性。所述技术可以以硬件、软件或两者的组合实现。
为了模拟,程序代码可以使用硬件描述语言或其它功能描述语言呈现硬件,所述语言本质上提供期望如何执行所设计的硬件的模型。程序代码可以是汇编语言或机器语言,或者是可以进行编译和/或解释的数据。此外,在本领域中通常以采取行动或引起结果的一种形式或其它形式谈及软件。这种表达仅仅是一种陈述通过处理系统执行程序代码使得处理器执行动作或产生结果的节略方式。
每一程序可以以高级过程语言或面向对象编程语言实现,以与处理系统进行通信。然而,如果需要,可以用汇编语言或机器语言实现程序。在任一情况下,可以对语言进行编译或解释。
程序指令可用于使得以指令进行编程的通用或专用处理系统执行本文所述的操作。可替换地,通过包含用于执行操作的硬线逻辑的专用硬件部件,或者通过编程计算机部件和定制硬件部件的任意组合,可以执行操作。本文所描述的方法可以设置为计算机程序产品,其可以包括存储有指令的机器可访问介质,所述指令可被用于对处理系统或其它电子设备进行编程以执行所述方法。
程序代码或指令可以存储到例如易失性和/或非易失性存储器中,例如储存器设备和/或相关联的机器可读或机器可访问介质,其包括固态存储器、硬盘驱动器、软盘、光储存器、磁带、闪存、记忆棒、数字视频盘、数字通用磁盘(DVD)等,以及更多外来介质,例如机器可访问生物状态保存储存器。机器可读介质可以包括用于存储、传输或接收机器可读形式的信息的任意部件,并且所述介质可以包括有形介质,对程序代码进行编码的电、光、声或其它形式的传播信号或载波可以通过所述介质,所述有形介质例如为天线、光纤、通信接口等。程序代码可以以分组、串行数据、并行数据、传播信号等的形式进行传输,并且可以以压缩或加密的格式进行使用。
程序代码可以实现为在可编程机器上执行的程序,所述机器例如为移动或静止计算机、个人数字助理、机顶盒、蜂窝电话和寻呼机、消费电子设备(包括DVD播放器、个人录像机、个人视频播放器、卫星接收器、立体接收机、有线TV接收器)、例如耦合到汽车上的那些嵌入式处理器,以及其它电子设备,每个包括处理器、处理器可读的易失性和/或非易失性存储器、至少一个输入设备和/或一个或多个输出设备。程序代码可以应用到利用输入设备输入的数据上,以执行所描述的实施例并生成输出信息。输出信息可以应用到一个或多个输出设备。本领域的普通技术人员可以理解的是,可利用各种计算机系统配置来实现所公开的主题的实施例,所述系统配置包括多处理器或多内核处理器系统、小型计算机、大型计算机,以及可以虚拟嵌入到任何设备中的普遍或微型计算机或处理器。所公开的主题的实施例还可以以分布式计算环境实现,其任务或部分可以由通过通信网络链接的远程处理设备执行。
虽然可以将操作描述为顺序过程,但是有些操作实际上可以并行、并发和/或在分布式环境中执行,其中本地和/或远程存储的程序代码由单个或多个处理器机器访问。另外,在一些实施例中,可以重新布置操作的次序,而不背离所公开的主题的精神。程序代码可以由嵌入式控制器使用或结合所述控制器使用。
虽然已经结合图示实施例描述了本发明,但是本说明书并不意图解释为限制的意义。对本发明所属领域的技术人员而言,明显的图示实施例的各种修改以及本发明的其它实施例将被认为落入本发明的精神和范围内。
Claims (41)
1.一种用于管理并发实体的计算机实现系统,包括:
耦合到存储器的处理器,所述处理器被配置为执行多线程应用程序;
在所述处理器上执行的多线程应用,多线程应用程序被配置为使用并发实体,并且其中所述多线程应用的多个线程被配置为生成多个操作节点,以与其它线程并发地在所述并发实体上操作;
同步和聚合逻辑部件,其耦合到所述多线程应用,并被配置为接受来自所述多个线程的操作节点,每个操作节点对应于单个线程,被接受的操作节点放置于临时列表中,所述操作节点定义在并发实体上执行的操作,其中,只有已知为处理程序线程的一个线程被允许在临时列表上操作,以在所述并发实体上执行操作,并且其中,在被允许向第二临时列表提供另一操作节点之前,每个线程被允许向所述临时列表仅提供一个操作节点,并且等待直到所述处理程序线程已经处理了相应的操作节点;并且
所述并发实体存储于所述多线程应用程序可访问的存储器中。
2.根据权利要求1所述的系统,其中所述处理程序线程被配置为轮询处理程序忙标志以确定在所述临时列表上的操作是否开始,并且其中用于所述临时列表的所述处理程序线程是在其它任意线程之前已经向所述临时列表添加了操作节点的线程。
3.根据权利要求1所述的系统,其中线程被配置为在将操作节点放置在所述临时列表上之后轮询就绪标志,所述就绪标志为是否允许所述线程继续操作的指示符,并且其中所述处理程序线程被配置为在处理来自所述临时列表的操作节点之后重置对应于所述线程的所述就绪标志。
4.根据权利要求1所述的系统,其中所述处理程序线程被配置为经由原子操作检索所述临时列表到新的指针对象,并且经由原子操作用空列表代替原始的临时列表。
5.根据权利要求1所述的系统,其中所述线程被配置为经由原子操作将操作节点放置到所述临时列表中。
6.根据权利要求1所述的系统,其中所述并发实体包括被配置为接受入队和出队操作的并发优先级队列,并且其中每个操作节点包括入队操作或出队操作两者中的一个,并且所述系统还包括:
入队/出队优化逻辑部件,其耦合到所述多线程应用并且访问所述并发优先级队列,其中所述处理程序线程被配置为在临时列表上进行操作,以在对并发优先级队列中的项目进行重排序之前,先于对非常数时间出队操作的操作,处理当入队操作节点应用到并发优先级队列时的入队操作节点以及处理常数时间出队操作,并且其中在所有非常数时间出队操作之前执行入队操作,并且其中所述处理程序线程还被配置为在执行所有的操作节点并且对并发优先级队列进行重新排序之后,向所述多线程应用提供进行完全堆排序的并发优先级队列。
7.根据权利要求6所述的系统,其中所述并发优先级队列包括存储于所述存储器中的数组数据结构,其中,当非空时,至少一部分数组元素存储于堆中。
8.根据权利要求7所述的系统,其中所述处理程序线程被配置为一次处理一个来自所述临时列表中的入队和出队操作节点,其中入队操作节点被添加到并发优先级队列的未排序部分,直到出队操作节点被处理,并且其中当添加到优先级队列的未排序部分中的最后的项目具有比堆中最高优先级项目高的优先级时,所述线程被配置为通过返回添加到未排序部分的最后的入队项目而执行出队操作,并且当所有的入队操作项目都已被添加到并发优先级队列的未排序部分时,执行任意剩余的出队操作节点,并且随着操作节点被从堆中移除而对所述并发优先级队列的堆部分进行重排序。
9.一种用于管理并发优先级队列的计算机实现系统,包括:
耦合到存储器的处理器,所述处理器被配置为执行多线程应用程序;
在所述处理器上执行的多线程应用,所述多线程应用程序被配置为使用存储于所述存储器内的并发优先级队列,并且被配置为接受入队和出队操作,并且其中所述多线程应用的多个线程被配置为生成多个操作节点,以与其它线程并发地在所述并发优先级队列上进行操作,并且其中每个操作节点包括入队操作或出队操作两者之一;
入队/出队优化逻辑部件,其耦合到所述多线程应用并且访问所述并发优先级队列,其中处理程序线程被配置为在临时列表上进行操作,以在对并发优先级队列中的项目进行重排序之前,先于对非常数时间出队操作的操作,处理当入队操作节点应用到并发优先级队列时的入队操作节点以及处理常数时间出队操作,并且其中在所有非常数时间出队操作之前执行入队操作,并且其中所述处理程序线程还被配置为在执行所有的操作节点并且对并发优先级队列进行重排序之后,向所述多线程应用提供完全排序的并发优先级队列。
10.根据权利要求9所述的系统,其中所述并发优先级队列包括存储于所述存储器中的数组数据结构,其中,当非空时,至少一部分数组元素存储于堆中。
11.根据权利要求10所述的系统,其中所述处理程序线程被配置为一次处理一个来自所述临时列表中的入队和出队操作节点,其中入队操作节点被添加到并发优先级队列的未排序部分,直到出队操作节点被处理,并且其中当添加到优先级队列的未排序部分中的最后的项目具有比堆中最高优先级项目高的优先级时,所述线程被配置为通过返回添加到未排序部分的最后的入队项目而执行出队操作,并且当所有的入队操作项目都已被添加到并发优先级队列的未排序部分时,执行任意剩余的出队操作节点,并且随着从堆中移除操作节点而对所述并发优先级队列的堆部分进行重排序。
12.根据权利要求9所述的系统,其中所述处理程序线程还被配置为在完成处理临时列表之后重置处理程序忙标志,所述处理程序标志用于指示等待线程能够开始在包括操作节点的第二临时列表上处理。
13.根据权利要求9所述的系统,还包括:
同步和聚合逻辑部件,其耦合到所述多线程应用,并被配置为接受来自所述多个线程的操作节点,每个操作节点对应于单个线程,被接受的操作节点放置于临时列表中,所述操作节点定义在并发优先级队列上执行的操作,其中,只有已知为处理程序线程的一个线程被允许在临时列表上操作,以在所述并发优先级队列上执行操作,并且其中,在被允许向第二临时列表提供另一操作节点之前,每个线程被允许向所述临时列表仅提供一个操作节点,并且等待直到所述处理程序线程已经处理了相应的操作节点;并且
所述临时列表存储于所述入队/出队优化逻辑部件可访问的存储器中,用于与所述并发优先级队列一起处理。
14.根据权利要求13所述的系统,其中所述处理程序线程被配置为轮询处理程序忙标志以确定在所述临时列表上的操作是否开始,并且其中用于所述临时列表的所述处理程序线程是在任意其它线程之前已向所述临时列表添加操作节点的线程。
15.根据权利要求13所述的系统,其中线程被配置为在将操作节点放置在所述临时列表上之后轮询就绪标志,所述就绪标志为是否允许所述线程继续操作的指示符,并且其中所述处理程序线程被配置为在处理来自所述临时列表的操作节点之后重置对应于所述线程的所述就绪标志。
16.根据权利要求13所述的系统,其中所述处理程序线程被配置为经由原子操作检索所述临时列表到新的指针,并且经由原子操作留下包括第二临时列表的初始为空的列表。
17.根据权利要求13所述的系统,其中所述线程被配置为经由原子操作将操作节点放置到所述临时列表中。
18.一种用于管理并发实体的装置,包括:
用于通过在机器上运行的多线程应用中执行的多个线程中的至少一个线程向临时列表添加操作节点的部件;
用于将向所述临时列表添加操作节点的第一线程指定为用于所述临时列表的处理程序线程的部件;
用于由所述处理程序线程等待标志指示允许所述临时列表的处理开始的部件;
用于当所述标志指示允许所述临时列表的处理开始时,通过所述处理程序线程以原子操作检索所述临时列表并生成初始为空的第二临时列表的部件,其中当至少一个线程不具有在检索的临时列表上的未处理的操作节点时,第二临时列表通过至少一个线程接收操作节点;以及
用于通过所述处理程序线程将临时列表处理到并发实体中的部件。
19.根据权利要求18所述的装置,其中所述并发实体包括并发优先级队列,并且操作节点包括将在所述并发优先级队列上执行的入队或出队操作两者中的一个。
20.根据权利要求19所述的装置,还包括:
当第二处理程序线程已经将第一操作节点添加到第二临时列表时,用于指定所述第二处理程序线程与所述第二临时列表相关联的部件;以及
在所述第二处理程序线程处理所述第二临时列表之前,用于通过所述第二处理程序线程等待直到所述临时列表已经被处理程序线程处理的部件。
21.根据权利要求19所述的装置,其中操作节点由线程经由原子操作添加到所述临时列表。
22.根据权利要求19所述的装置,其中所述并发优先级队列包括存储于存储器中的数组数据结构,其中,当非空时,至少一部分数组元素存储于堆中。
23.根据权利要求22所述的装置,还包括:
用于由所述处理程序线程处理所述临时列表中的操作节点的部件,其中所述临时列表中的入队操作节点被在常数时间内添加到所述并发优先级队列中,并且延迟所述临时列表中的非常数时间出队操作,直到所述临时列表中的所有的常数时间入队和出队操作节点已被所述处理程序线程处理;以及
用于在必要时,在所述临时列表已被所述处理程序线程处理之后,对所述并发优先级队列进行重排序的部件。
24.根据权利要求23所述的装置,还包括:
用于将入队操作项目添加到所述并发优先级队列的未排序部分直到出队操作节点被处理的部件,并且其中当添加到优先级队列的未排序部分中的最后的项目具有比堆中最高优先级项目高的优先级时,对添加到未排序部分的最后的入队项目执行出队操作;以及
用于当所有的入队操作项目都已添加到所述并发优先级队列的未排序部分时,执行任意剩余的出队操作节点,并且随着操作节点被从堆中移除而对所述并发优先级队列的堆部分进行重排序的部件。
25.一种用于管理并发优先级队列的装置,包括:
用于处理来自临时列表的入队和出队操作节点的部件,所述入队和出队操作节点对应于将于与在机器上执行的多线程应用相关联的并发优先级队列上执行的操作,所述处理将由被指定为用于所述临时列表的处理程序线程的线程执行,并且其中所述并发优先级队列包括存储于存储器中的数组数据结构,其中,当非空时,至少一部分数组元素存储于堆中;
用于由所述处理程序线程处理所述临时列表中的操作节点的部件,其中所述临时列表中的入队操作节点被在常数时间内添加到所述并发优先级队列中,并且延迟所述临时列表中的非常数时间出队操作,直到所述临时列表中所有的常数时间入队和出队操作节点已被所述处理程序线程处理;以及
用于在必要时,在所述临时列表已被所述处理程序线程处理之后,对所述并发优先级队列进行重排序的部件。
26.根据权利要求25所述的装置,还包括:
用于将入队操作节点添加到所述并发优先级队列的未排序部分直到出队操作节点被处理的部件,并且其中当添加到优先级队列的未排序部分中的最后的项目具有比堆中最高优先级项目高的优先级时,执行返回添加到未排序部分的最后的入队项目的出队操作;以及
用于当所有的入队操作节点都已被添加到所述并发优先级队列的未排序部分时,执行任意剩余的出队操作节点,并且随着操作节点被从堆中移除而对所述并发优先级队列的堆部分进行重排序的部件。
27.根据权利要求25所述的装置,还包括用于生成临时列表的部件,包括:
用于将向所述临时列表添加操作节点的第一线程指定为用于所述临时列表的处理程序线程的部件;
用于由所述处理程序线程等待标志指示允许所述临时列表的处理开始的部件;以及
用于当所述标志指示允许所述临时列表的处理开始时,通过所述处理程序线程经由原子操作检索所述临时列表并生成初始为空的第二临时列表的部件,其中当至少一个线程在检索的临时列表上不具有未处理的操作节点时,第二临时列表通过所述至少一个线程接收操作节点。
28.根据权利要求27所述的装置,还包括:
当第二处理程序线程已经将第一操作节点添加到第二临时列表时,用于指定所述第二处理程序线程与所述第二临时列表相关联的部件;以及
在所述第二处理程序线程处理所述第二临时列表之前,用于由所述第二处理程序线程等待直到所述临时列表已经被处理程序线程处理的部件。
29.根据权利要求27所述的装置,其中所述操作节点由线程经由原子操作添加到所述临时列表。
30.一种用于管理并发实体的计算机实现方法:
通过在机器上运行的多线程应用中执行的多个线程中的至少一个线程,向临时列表添加操作节点;
将向所述临时列表添加操作节点的第一线程指定为用于所述临时列表的处理程序线程;
由所述处理程序线程等待标志指示允许所述临时列表的处理开始;
当所述标志指示允许所述临时列表的处理开始时,通过所述处理程序线程以原子操作检索所述临时列表并生成初始为空的第二临时列表,其中当至少一个线程不具有在检索的临时列表上的未处理的操作节点时,第二临时列表通过至少一个线程接收操作节点;以及
通过所述处理程序线程将临时列表处理到并发实体中。
31.根据权利要求30所述的方法,其中所述并发实体包括并发优先级队列,并且操作节点包括将在所述并发优先级队列上执行的入队或出队操作两者中的一个。
32.根据权利要求31所述的方法,还包括:
当第二处理程序线程已经将第一操作节点添加到第二临时列表时,指定所述第二处理程序线程与所述第二临时列表相关联;以及
在所述第二处理程序线程处理所述第二临时列表之前,通过所述第二处理程序线程等待直到所述临时列表已经被处理程序线程处理。
33.根据权利要求31所述的方法,其中操作节点由线程经由原子操作添加到所述临时列表。
34.根据权利要求31所述的方法,其中所述并发优先级队列包括存储于存储器中的数组数据结构,其中,当非空时,至少一部分数组元素存储于堆中。
35.根据权利要求34所述的方法,还包括:
由所述处理程序线程处理所述临时列表中的操作节点,其中所述临时列表中的入队操作节点被在常数时间内添加到所述并发优先级队列中,并且延迟所述临时列表中的非常数时间出队操作,直到所述临时列表中的所有的常数时间入队和出队操作节点已被所述处理程序线程处理;以及
在必要时,在所述临时列表已被所述处理程序线程处理之后,对所述并发优先级队列进行重排序。
36.根据权利要求35所述的方法,还包括:
将入队操作项目添加到所述并发优先级队列的未排序部分,直到出队操作节点被处理,并且其中当添加到优先级队列的未排序部分中的最后的项目具有比堆中最高优先级项目高的优先级时,对添加到未排序部分的最后的入队项目执行出队操作;以及
当所有的入队操作项目都已添加到所述并发优先级队列的未排序部分时,执行任意剩余的出队操作节点,并且随着操作节点被从堆中移除而对所述并发优先级队列的堆部分进行重排序。
37.一种用于管理并发优先级队列的方法,包括:
处理来自临时列表的入队和出队操作节点,所述入队和出队操作节点对应于将于与在机器上执行的多线程应用相关联的并发优先级队列上执行的操作,所述处理将由被指定为用于所述临时列表的处理程序线程的线程执行,并且其中所述并发优先级队列包括存储于存储器中的数组数据结构,其中,当非空时,至少一部分数组元素存储于堆中;
由所述处理程序线程处理所述临时列表中的操作节点,其中所述临时列表中的入队操作节点被在常数时间内添加到所述并发优先级队列中,并且延迟所述临时列表中的非常数时间出队操作,直到所述临时列表中所有的常数时间入队和出队操作节点已被所述处理程序线程处理;以及
在必要时,在所述临时列表已被所述处理程序线程处理之后,对所述并发优先级队列进行重排序。
38.根据权利要求37所述的方法,还包括:
将入队操作节点添加到所述并发优先级队列的未排序部分,直到出队操作节点被处理,并且其中当添加到优先级队列的未排序部分中的最后的项目具有比堆中最高优先级项目高的优先级时,执行返回添加到未排序部分的最后的入队项目的出队操作;以及
当所有的入队操作节点都已被添加到所述并发优先级队列的未排序部分时,执行任意剩余的出队操作节点,并且随着操作节点被从堆中移除而对所述并发优先级队列的堆部分进行重排序。
39.根据权利要求37所述的方法,还包括生成临时列表,包括:
将向所述临时列表添加操作节点的第一线程指定为用于所述临时列表的处理程序线程;
由所述处理程序线程等待标志指示允许所述临时列表的处理开始;以及
当所述标志指示允许所述临时列表的处理开始时,通过所述处理程序线程经由原子操作检索所述临时列表并生成初始为空的第二临时列表,其中当至少一个线程在检索的临时列表上不具有未处理的操作节点时,第二临时列表通过所述至少一个线程接收操作节点。
40.根据权利要求39所述的方法,还包括:
当第二处理程序线程已经将第一操作节点添加到第二临时列表时,指定所述第二处理程序线程与所述第二临时列表相关联;以及
在所述第二处理程序线程处理所述第二临时列表之前,由所述第二处理程序线程等待直到所述临时列表已经被处理程序线程处理。
41.根据权利要求39所述的方法,其中所述操作节点由线程经由原子操作添加到所述临时列表。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/970,691 | 2010-12-16 | ||
US12/970,691 US8387057B2 (en) | 2010-12-16 | 2010-12-16 | Fast and linearizable concurrent priority queue via dynamic aggregation of operations |
PCT/US2011/061373 WO2012082312A2 (en) | 2010-12-16 | 2011-11-18 | A fast and linearizable concurrent priority queue via dynamic aggregation of operations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103262030A CN103262030A (zh) | 2013-08-21 |
CN103262030B true CN103262030B (zh) | 2015-12-09 |
Family
ID=46236253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180059844.8A Expired - Fee Related CN103262030B (zh) | 2010-12-16 | 2011-11-18 | 经由动态聚合操作的快速且线性化并发优先级队列 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8387057B2 (zh) |
EP (1) | EP2652598A4 (zh) |
CN (1) | CN103262030B (zh) |
TW (1) | TWI521430B (zh) |
WO (1) | WO2012082312A2 (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10095562B2 (en) | 2013-02-28 | 2018-10-09 | Oracle International Corporation | System and method for transforming a queue from non-blocking to blocking |
US9110715B2 (en) * | 2013-02-28 | 2015-08-18 | Oracle International Corporation | System and method for using a sequencer in a concurrent priority queue |
US9401869B1 (en) * | 2012-06-04 | 2016-07-26 | Google Inc. | System and methods for sharing memory subsystem resources among datacenter applications |
US9811533B2 (en) * | 2012-12-05 | 2017-11-07 | International Business Machines Corporation | Accessing distributed computing functions in a distributed computing system |
US10095556B2 (en) | 2012-12-20 | 2018-10-09 | Georgia State University Research Foundation, Inc. | Parallel priority queue utilizing parallel heap on many-core processors for accelerating priority-queue-based applications |
US9158698B2 (en) | 2013-03-15 | 2015-10-13 | International Business Machines Corporation | Dynamically removing entries from an executing queue |
US9552665B2 (en) * | 2013-03-18 | 2017-01-24 | Arm Limited | Hidden surface removal in graphics processing systems |
US9715406B2 (en) | 2013-06-14 | 2017-07-25 | Microsoft Technology Licensing, Llc | Assigning and scheduling threads for multiple prioritized queues |
US9256461B2 (en) | 2013-09-18 | 2016-02-09 | International Business Machines Corporation | Handling interrupt actions for inter-thread communication |
CN110109736B (zh) * | 2013-12-09 | 2023-03-07 | 超威半导体公司 | 3d芯片系统中的电压下降缓解 |
CN104932933B (zh) * | 2014-03-21 | 2018-11-13 | 华为技术有限公司 | 一种获取自旋锁的方法及装置 |
US10698607B2 (en) * | 2015-05-19 | 2020-06-30 | Netapp Inc. | Configuration update management |
CN105068758B (zh) * | 2015-07-23 | 2018-06-19 | 清华大学 | 面向并行数据采集的分布式文件系统数据i/o优化方法 |
US10409800B2 (en) | 2015-08-03 | 2019-09-10 | Sap Se | Priority queue for exclusive locks |
US9940163B2 (en) * | 2015-09-08 | 2018-04-10 | International Business Machines Corporation | Ordering repeating elements within a message |
US9825874B2 (en) * | 2016-03-17 | 2017-11-21 | T-Mobile Usa, Inc. | Dynamically optimized queue in data routing |
US10891570B2 (en) * | 2016-05-09 | 2021-01-12 | Sap Se | Connection multiplexing for a parallel processing environment |
US10423464B2 (en) * | 2016-09-30 | 2019-09-24 | Hewlett Packard Enterprise Patent Development LP | Persistent ticket operation |
US10331500B2 (en) | 2017-04-05 | 2019-06-25 | Cavium, Llc | Managing fairness for lock and unlock operations using operation prioritization |
US10445096B2 (en) | 2017-04-05 | 2019-10-15 | Cavium, Llc | Managing lock and unlock operations using traffic prioritization |
CN108279927B (zh) * | 2017-12-26 | 2020-07-31 | 芯原微电子(上海)股份有限公司 | 可调整指令优先级的多通道指令控制方法及系统、控制器 |
US11169804B2 (en) | 2018-09-24 | 2021-11-09 | Oracle International Corporation | Method for vectorizing d-heaps using horizontal aggregation SIMD instructions |
US11016778B2 (en) | 2019-03-12 | 2021-05-25 | Oracle International Corporation | Method for vectorizing Heapsort using horizontal aggregation SIMD instructions |
CN112114862B (zh) * | 2019-06-20 | 2023-12-22 | 普天信息技术有限公司 | spring boot实例并发处理方法及装置 |
CN111124641B (zh) * | 2019-12-12 | 2023-10-31 | 中盈优创资讯科技有限公司 | 一种利用多线程的数据处理方法及系统 |
US11573793B2 (en) | 2020-03-18 | 2023-02-07 | Oracle International Corporation | Lazy push strategies for vectorized D-Heaps |
CN111767138A (zh) * | 2020-06-09 | 2020-10-13 | Oppo广东移动通信有限公司 | 资源分配方法、存储介质和电子设备 |
CN113010293B (zh) * | 2021-03-19 | 2023-08-22 | 广州万协通信息技术有限公司 | 一种多线程并发数据加解密处理方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183304A (zh) * | 2006-11-13 | 2008-05-21 | 国际商业机器公司 | 并发非阻塞无锁队列及其实施方法和装置 |
US7836228B1 (en) * | 2004-06-18 | 2010-11-16 | Oracle America, Inc. | Scalable and lock-free first-in-first-out queue implementation |
CN101894065A (zh) * | 2009-02-12 | 2010-11-24 | 国际商业机器公司 | 证明并发处理环境内的执行跟踪的正确性的系统和方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5850538A (en) * | 1997-04-23 | 1998-12-15 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Priority queues for computer simulations |
US6954933B2 (en) * | 2000-10-30 | 2005-10-11 | Microsoft Corporation | Method and apparatus for providing and integrating high-performance message queues in a user interface environment |
US7117502B1 (en) * | 2000-11-10 | 2006-10-03 | Sun Microsystems, Inc. | Linked-list implementation of a data structure with concurrent non-blocking insert and remove operations |
US7424477B1 (en) * | 2003-09-03 | 2008-09-09 | Sun Microsystems, Inc. | Shared synchronized skip-list data structure and technique employing linearizable operations |
US6988180B2 (en) * | 2003-09-29 | 2006-01-17 | Microsoft Corporation | Method and apparatus for lock-free, non-blocking hash table |
US7451146B2 (en) * | 2004-06-30 | 2008-11-11 | Hewlett-Packard Development Company, L.P. | Almost non-blocking linked stack implementation |
US7844973B1 (en) * | 2004-12-09 | 2010-11-30 | Oracle America, Inc. | Methods and apparatus providing non-blocking access to a resource |
US8141086B2 (en) * | 2008-06-06 | 2012-03-20 | International Business Machines Corporation | Using data in elements of a singly linked list without a lock in a multithreaded environment |
US7937378B2 (en) * | 2008-08-13 | 2011-05-03 | Oracle America, Inc. | Concurrent lock-free skiplist with wait-free contains operator |
US8095491B1 (en) * | 2008-12-08 | 2012-01-10 | The United States Of America As Represented By The Secretary Of The Navy | Optimization technique using heap sort |
US8402466B2 (en) * | 2009-02-17 | 2013-03-19 | International Business Machines Corporation | Practical contention-free distributed weighted fair-share scheduler |
-
2010
- 2010-12-16 US US12/970,691 patent/US8387057B2/en not_active Expired - Fee Related
-
2011
- 2011-11-18 WO PCT/US2011/061373 patent/WO2012082312A2/en unknown
- 2011-11-18 EP EP11849606.6A patent/EP2652598A4/en not_active Withdrawn
- 2011-11-18 CN CN201180059844.8A patent/CN103262030B/zh not_active Expired - Fee Related
- 2011-11-23 TW TW100142923A patent/TWI521430B/zh not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7836228B1 (en) * | 2004-06-18 | 2010-11-16 | Oracle America, Inc. | Scalable and lock-free first-in-first-out queue implementation |
CN101183304A (zh) * | 2006-11-13 | 2008-05-21 | 国际商业机器公司 | 并发非阻塞无锁队列及其实施方法和装置 |
CN101894065A (zh) * | 2009-02-12 | 2010-11-24 | 国际商业机器公司 | 证明并发处理环境内的执行跟踪的正确性的系统和方法 |
Non-Patent Citations (2)
Title |
---|
A Speculative thread pipelining parallelization model for Java programs;Kazi.I.H.等;《14th Internation Parallel and Distributed Processing Symposium》;20001231;第559页至第564页 * |
An Evaluation of Concurrent Priority Queue Algorithms;Qin Huang等;《the Third IEEE Symposium on Parallel and Distributed Processing》;19911230;第518页至第525页 * |
Also Published As
Publication number | Publication date |
---|---|
TW201229897A (en) | 2012-07-16 |
EP2652598A4 (en) | 2015-10-28 |
EP2652598A2 (en) | 2013-10-23 |
WO2012082312A2 (en) | 2012-06-21 |
US20120159498A1 (en) | 2012-06-21 |
CN103262030A (zh) | 2013-08-21 |
US8387057B2 (en) | 2013-02-26 |
TWI521430B (zh) | 2016-02-11 |
WO2012082312A3 (en) | 2012-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103262030B (zh) | 经由动态聚合操作的快速且线性化并发优先级队列 | |
US9619430B2 (en) | Active non-volatile memory post-processing | |
CN101452400B (zh) | 处理多处理器系统中事务缓冲器溢出的方法和系统 | |
CN101194245B (zh) | 具有宽寄存器组体系结构的分组处理器 | |
US8015248B2 (en) | Queuing of conflicted remotely received transactions | |
TWI317482B (en) | Wide-port context cache apparatus, systems and methods, and machine-accessible medium having associated information | |
US20140181421A1 (en) | Processing engine for complex atomic operations | |
CN106462395B (zh) | 多线程处理器架构中的线程等待 | |
US11487435B1 (en) | System and method for non-volatile memory-based optimized, versioned, log-structured metadata storage with efficient data retrieval | |
US20100114824A1 (en) | Replication for common availability substrate | |
US11941429B2 (en) | Persistent multi-word compare-and-swap | |
US20110093429A1 (en) | Search device and search method | |
CN104937564B (zh) | 组表格的数据冲洗 | |
CN107656834A (zh) | 基于事务日志恢复主机访问 | |
US20140156959A1 (en) | Concurrent array-based queue | |
CN105164637A (zh) | 对管线化的软件的动态优化 | |
WO2023160088A1 (zh) | 一种区块链交易的处理方法、区块链节点及电子设备 | |
CN101692213B (zh) | 通用串行总线主机控制方法和通用串行总线主机控制器 | |
CN110597627B (zh) | 基于虚拟fpga的数据库运算加速装置及加速方法 | |
CN111860807A (zh) | 分形计算装置、方法、集成电路及板卡 | |
CN103577347A (zh) | 用于操作存储器设备的方法和用于存储器操作的系统 | |
CN106775468B (zh) | 分布式事务的实现方法和系统 | |
CN104166539A (zh) | 并行原子递增 | |
US20110258279A1 (en) | Asynchronous Future Based API | |
RU2281546C1 (ru) | Способ обработки информации на основе потока данных и устройство для его осуществления |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151209 Termination date: 20211118 |