一种无锁线程有序控制存储信息的方法、装置和服务器制造方法及图纸

技术编号:18591631 阅读:25 留言:0更新日期:2018-08-04 19:59
本发明专利技术涉及数据存储技术领域,提供一种无锁线程有序控制存储信息的方法、装置和服务器。所述方法包括:根据循环队列中共享存储节点的非发布状态,在至少两个第一线程中的焦点线程向共享存储节点存入当前数据期间调用CAS指令;当当前数据存入结束时,非发布状态修改为发布状态,发布状态用于指示第二线程可读取当前数据;为第二线程分配处于发布状态的共享存储节点;根据共享存储节点在循环队列中的存储位置和CAS指令中原游标的一致性,以单向量更新原游标,使焦点线程锁定共享存储节点。如此,可以控制线程有序存取数据,克服对存储队列控制时产生的额外开销,提高线程并发效率。

A method, device and server for orderly storing and storing information without lock threads

The invention relates to the technical field of data storage, and provides a method, device and server for orderly control of storage information by unlocked threads. The methods described include: according to the non release state of the shared memory node in the circular queue, the CAS instruction is invoked during the focus threads of at least two first threads into the shared storage node in the current data; when the current data is stored, the non release state is modified to the publish state and the release state is used to indicate the second thread. Can read the current data; allocate the shared memory node in the publishing state for the second thread; update the original cursor with a single vector based on the storage location of the shared storage node in the circular queue and the consistency of the CAS instruction cursor, so that the focus thread locks the shared memory node. In this way, the thread can be controlled to access data orderly, overcoming the additional overhead caused by the storage queue control, and improving the efficiency of thread concurrency.

【技术实现步骤摘要】
一种无锁线程有序控制存储信息的方法、装置和服务器
本专利技术涉及数据存储
,尤其涉及一种无锁线程在循环队列中控制存储信息的方法和装置。
技术介绍
在相关技术中,为了避免应用或者操作系统的线程从存储队列中同时读写存储数据而造成数据冲突,采用对线程加锁的方式控制其串行执行读写操作,由于在持有锁的线程释放锁后,挂起的线程才能加锁以串行读写存储数据,限制了存储队列的并发效率,所以采用无锁线程方式明显更高效。为了使无锁线程有序读写存储数据,针对存储队列有阻塞或非阻塞算法,但都必须保证并发线程同步访问同一存储节点(为了便于描述,下称共享存储节点)以维持存储队列的完整性,分别通过延迟队列(如:生成并检验额外增加的唯一编码)或者限制多线程在有限步骤(如:增加虚节点并控制其出入列)内完成对存储队列中共享存储节点的操作,从而增加了额外开销。在一些情形下,如在服务器上较多线程需要在存储队列中频繁读写存储节点时,突出的额外开销也会降低并发效率。
技术实现思路
有鉴于此,本专利技术提供一种,解决如何在克服额外开销的基础上,对无锁线程从存储队列中存储节点有序读写信息进行控制,以提高线程并发效率。具体地,本专利技术通过如下技术方案实现:第一方面,本专利技术提供一种无锁线程在循环队列中控制存储信息的方法,该方法包括以下具体步骤:根据循环队列中共享存储节点的非发布状态,在至少两个第一线程中的焦点线程向共享存储节点存入当前数据期间调用CAS指令;当当前数据存入结束时,非发布状态修改为发布状态,发布状态用于指示与第二线程可读取当前数据;为第二线程分配处于发布状态的共享存储节点;根据共享存储节点在循环队列中的存储位置和CAS指令中原游标的一致性,以单向量更新原游标,为焦点线程锁定共享存储节点。可选地,当所述焦点线程开始存入存储数据时,焦点线程发送通知信息,通知信息中携带用于唯一标识存储位置的存储编号;根据通知信息调用CAS指令。可选地,基于第二线程从共享存储节点中读取的当前数据分量,发布状态切换至非发布状态。可选地,当当前数据分量小于当前数据总量时,发布状态切换至非发布状态中的独占状态,独占状态用于指示第一线程可向共享存储节点中续存在当前数据之后的数据;当当前数据分量等于当前数据总量时,发布状态切换至非发布状态中的空闲状态。可选地,当存储位置与原游标一致时,以新游标替换原游标,新游标等于原游标和单向量之和。可选地,当共享存储节点为循环队列中尾节点时,将单向量从正向量修改为负向量;以等于原游标与负向量之和的新游标更新原游标。可选地,当共享存储节点为循环队列中尾节点时,将新游标设置为循环队列中首节点对应的存储位置。可选地,当存储位置和原游标不一致时,向焦点线程反馈用于指示停止存入当前数据的通知信息。可选地,为焦点线程反馈用于指示续存当前数据的通知信息。第二方面,基于相同的构思,本专利技术还提供一种无锁线程在循环队列中控制存储信息的装置,该装置包括以下具体单元:指令调用单元,用于根据循环队列中共享存储节点的非发布状态,在至少两个第一线程中的焦点线程向共享存储节点存入当前数据期间调用CAS指令;状态修改单元,用于当当前数据存入结束时,非发布状态修改为发布状态,发布状态用于指示与第二线程可读取当前数据;节点分配单元,用于为第二线程分配处于发布状态的存储节点;游标更新单元,用于根据共享存储节点在循环队列中的存储位置和CAS指令中原游标的一致性,以单向量更新原游标,使焦点线程锁定共享存储节点。第三方面,基于相同的构思,本申请还提供一种订单服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述程序时实现以下步骤,该步骤包括第一方面任一所述的方法步骤。第四方面,基于相同的构思,本申请还提供一种计算机存储介质,计算机可读存储介质中存储有CAS指令和至少一个或者一组其他指令,执行CAS指令和其他指令时可实现以下步骤,该步骤包括第一方面中任一所述的方法步骤。本专利技术实施例提供的技术方案带来的有益效果是:相比于现有技术,本申请为了向循环队列中有序存入数据,在共享存储节点处于非发布状态下,通过至少两个第一无锁线程相互抢占共享存储节点并在焦点线程向其中存入当前数据期间调用CAS指令,利用CAS指令以单向量所指示的方向对原游标更新,可以为焦点线程锁定共享存储节点,与焦点线程不同的其他第一线程利用CAS指令验证原游标不一致,从而无法操作共享存储节点,使其他第一线程不再继续抢占共享存储节点,在此基础上,通过共享存储节点从非发布状态到发布状态的变化,结合被动分配方式使第一线程和第二线程串行控制共享存储节点,如此减少多个线程有序存取数据时的额外开销,提高并发效率。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例一中提供的一种无锁线程在循环队列中控制存储信息的流程示意图;图2a是本专利技术实施例一提供的线程控制存储节点2状态的示意图;图2b是图2a中线程存入数据后游标移动的示意图;图2c是图2b中存储节点3从非发布状态转换为发布状态的示意图;图3是本专利技术实施例一提供的控制存储信息的另一种流程示意图;图4a是本专利技术实施例一提供的多线程抢占存储节点4的示意图;图4b是图4a中多线程并发从循环队列中有序存取数据的示意图;图4c是图4b中线程存取数据后存储节点的状态变化示意图;图5是本专利技术实施例二提供的一种无锁线程在循环队列中控制存储信息的流程示意图;图6本专利技术实施例二提供的控制存储信息的另一种流程示意图;图7a至7c是实施例二提供的存储队列中存储节点状态变化的示意图;图8为本专利技术实施例三提供一种无锁线程在循环队列中控制存储信息的装置示意图;图9为本专利技术实施例三提供另一种无锁线程在循环队列中控制存储信息的装置示意图;图10提供本专利技术实施例四提供的一种服务器的结构示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术实施方式作进一步地详细描述。技术术语解释循环队列是指以单链表方式链接不同存储节点且可供焦点线程向单向量所指示的方向控制共享存储节点的存储队列。游标是指以共享存储节点的存储地址为参数表征且用于指示存储节点在循环队列中的存储位置,以供并发线程抢占存储节点。共享存储节点是指循环队列中可供至少两个并发线程抢占的节点,以使抢占到该节点的线程向其中存入或读取数据。焦点线程是指并发线程中抢占到共享存储节点的线程且该线程可在原游标更新后持续在抢占期间对共享存储节点的控制。实施例一在一些情形下,诸如分布式客户端基于用户购买商品行为集中生产支付订单,并将支付订单发送给服务器,服务器处理各个支付订单,为了提高用户消费体验,需要服务器及时存储支付订单中消费数据,给予客户端反馈。此时,存储消费数据的并发无锁线程会频繁抢占共享存储节点,存储节点也会从存储队列中频繁出入列,相应地,服务器中多线程读取消费数据也会增加出入列的频率,此时为了考虑存储队列中数据结构的完整性而增加虚节点或者与额外标识,会降低并发效率。为了提高上述情形下线程的并发效率,如图本文档来自技高网...

【技术保护点】
1.一种无锁线程在循环队列中控制存储信息的方法,其特征在于,所述方法包括:根据循环队列中共享存储节点的非发布状态,在至少两个第一线程中的焦点线程向所述共享存储节点存入当前数据期间调用CAS指令;当所述当前数据存入结束时,所述非发布状态修改为发布状态,所述发布状态用于指示与第二线程可读取所述当前数据;为所述第二线程分配处于所述发布状态的所述共享存储节点;根据所述共享存储节点在所述循环队列中的存储位置和所述CAS指令中原游标的一致性,以单向量更新所述原游标,为所述焦点线程锁定所述共享存储节点。

【技术特征摘要】
1.一种无锁线程在循环队列中控制存储信息的方法,其特征在于,所述方法包括:根据循环队列中共享存储节点的非发布状态,在至少两个第一线程中的焦点线程向所述共享存储节点存入当前数据期间调用CAS指令;当所述当前数据存入结束时,所述非发布状态修改为发布状态,所述发布状态用于指示与第二线程可读取所述当前数据;为所述第二线程分配处于所述发布状态的所述共享存储节点;根据所述共享存储节点在所述循环队列中的存储位置和所述CAS指令中原游标的一致性,以单向量更新所述原游标,为所述焦点线程锁定所述共享存储节点。2.根据权利要求1所述的方法,其特征在于,所述根据循环队列中共享存储节点的非发布状态,在至少两个第一线程中的焦点线程向所述共享存储节点存入当前数据期间调用CAS指令,包括:当所述焦点线程开始存入所述存储数据时,所述焦点线程发送通知信息,所述通知信息中携带用于唯一标识所述存储位置的存储编号;根据所述通知信息调用所述CAS指令。3.根据权利要求1所述的方法,其特征在于,在所述为所述第二线程分配处于所述发布状态的所述共享存储节点之后,包括:基于所述第二线程从所述共享存储节点中读取的所述当前数据分量,所述发布状态切换至所述非发布状态。4.根据权利要求3所述的方法,其特征在于,所述基于所述第二线程从所述共享存储节点中读取的所述当前数据分量,所述发布状态切换至所述非发布状态,包括:当所述当前数据分量小于所述当前数据总量时,所述发布状态切换至所述非发布状态中的独占状态,所述独占状态用于指示所述第一线程可向所述共享存储节点中续存在所述当前数据之后的数据;当所述当前数据分量等于所述当前数据总量时,所述发布状态切换至所述非发布状态中的空闲状态。5.根据权利要求1-3所述的方法,其特征在于,在根据所述共享存储节点在所述循环队列中的存储位置和所述CAS指令中原游标的一致性,以单向量更新所述原游标,为所述焦点线程锁定所述共享存储节点中,包括:当所述存储位置与所述原游标一致时,以新游标替换所述原游标,所述新游标等于所述原游标和所述单向量之和。6.根据权利要求1-3所述的方法,其特征在于,在根据所述共享存储节点在所述循...

【专利技术属性】
技术研发人员:刘希伟王绍民张凡文
申请(专利权)人:聚好看科技股份有限公司
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1