CN110727675A - 一种链表的处理方法及装置 - Google Patents

一种链表的处理方法及装置 Download PDF

Info

Publication number
CN110727675A
CN110727675A CN201810787497.4A CN201810787497A CN110727675A CN 110727675 A CN110727675 A CN 110727675A CN 201810787497 A CN201810787497 A CN 201810787497A CN 110727675 A CN110727675 A CN 110727675A
Authority
CN
China
Prior art keywords
linked list
value data
key value
key
node
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
Application number
CN201810787497.4A
Other languages
English (en)
Other versions
CN110727675B (zh
Inventor
陈梁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201810787497.4A priority Critical patent/CN110727675B/zh
Publication of CN110727675A publication Critical patent/CN110727675A/zh
Application granted granted Critical
Publication of CN110727675B publication Critical patent/CN110727675B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种链表的处理方法及装置。其中链表的处理方法包括:获取第一键值数据;根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。采用本申请提供的方法,解决了键值存储服务系统中的热点访问的并发问题。

Description

一种链表的处理方法及装置
技术领域
本申请涉及数据处理领域,具体涉及一种链表的处理方法及装置。
背景技术
随着海量数据业务的持续快速发展,键值存储服务系统的数据操作量越来越大。另外,受限于制造工艺因素,CPU的单线程能力受到制约,CPU向多核化方向发展,硬件提供的并发能力日益增强。因此,为了充分利用硬件的并发能力,使键值存储服务系统提供更高的数据吞吐量,从而降低业务成本,要求存储服务系统必须具有高并发处理能力。
哈希映射,即HashMap,是用哈希表实现Map接口,在键值存储服务系统中应用非常广泛。HashMap中的键值数据操作不具有并发能力。为了使HashMap中的键值数据操作具有并发能力,现有技术的一种方案是,采用细粒度锁,这种方案只能解决随机访问的并发,但是无法解决热点访问的并发问题。另外一种方案是,采用Actor模式,通过消息转发解决锁竞争,这种方案虽然解决了锁竞争,但是带来了额外的消息转发开销,同时也没有解决热点访问的并发问题。
发明内容
本申请提供一种链表的处理方法及装置,以解决键值存储服务系统中的热点访问的并发问题。
本申请提供的链表的处理方法,包括:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
优选的,所述第一键值数据包括键,所述根据所述第一键值数据查找与所述第一键值数据对应的链表,包括:
针对所述键进行哈希计算,获得哈希值;
根据所述哈希值,获得所述键对应的链表在哈希映射中的哈希地址;
根据所述哈希地址,在所述哈希映射中查找所述键对应的链表。
优选的,所述链表节点的信息包括以下至少一种信息:
链表节点的哈希值;
指向下一个链表节点的指针;
用于指向链表节点对应的键值数据的标识;
所述链表节点的信息与链表节点对应的键值数据分离存储包括:链表节点的哈希值、指向下一个链表节点的指针、用于指向链表节点对应的键值数据的标识中的至少一个信息与链表节点对应的键值数据分离存储。
优选的,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中未查找到与所述第一键值数据对应的链表节点,则在所述链表中创建所述第一键值数据对应的第一链表节点;
创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储。
优选的,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据替换为所述第一键值数据;
将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储;
将所述第二键值数据替换为所述第一键值数据之后,所述第二链表节点的信息与所述第一键值数据分离存储。
优选的,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点以及与所述第二链表节点对应的第二键值数据删除;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
优选的,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则获取所述第二链表节点对应的第二键值数据,所述第二链表节点与所述第二键值数据分离存储。
优选的,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:根据所述第一键值数据,按照所述链表结构,对所述链表进行CAS处理。
优选的,还包括:
在对所述链表处理前,执行RCU加锁操作;
在对所述链表处理后,执行RCU解锁操作。
优选的,还包括:采用RCU提供的异步回收机制回收在对所述链表进行处理过程中被删除的数据占用的内存资源。
优选的,所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
相应的,本申请还提供一种链表的处理装置,包括:
获取单元,用于获取第一键值数据;
查找单元,用于根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
处理单元,用于根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
优选的,所述第一键值数据包括键;所述查找单元具体用于:
针对所述键进行哈希计算,获得哈希值;
根据所述哈希值,获得所述键对应的链表在哈希映射中的哈希地址;
根据所述哈希地址,在所述哈希映射中查找所述键对应的链表。
优选的,所述链表节点的信息包括以下至少一种信息:
链表节点的哈希值;
指向下一个链表节点的指针;
用于指向链表节点对应的键值数据的标识;
所述链表节点的信息与链表节点对应的键值数据分离存储包括:链表节点的哈希值、指向下一个链表节点的指针、用于指向链表节点对应的键值数据的标识中的至少一个信息与链表节点对应的键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中未查找到与所述第一键值数据对应的链表节点,则在所述链表中创建所述第一键值数据对应的第一链表节点;
创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据替换为所述第一键值数据;
将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储;
将所述第二键值数据替换为所述第一键值数据之后,所述第二链表节点的信息与所述第一键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点以及与所述第二链表节点对应的第二键值数据删除;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据中的值返回;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
优选的,所述处理单元具体用于:根据所述第一键值数据,按照所述链表结构,对所述链表进行CAS处理。
优选的,还包括:
RCU处理单元,用于在对所述链表处理前,执行RCU加锁操作;在对所述链表处理后,执行RCU解锁操作。
优选的,所述RCU处理单元还用于回收在对所述链表进行处理过程中被删除的数据占用的内存资源。
优选的,所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
本申请还提供一种电子设备,所述电子设备包括:
显示器;
处理器;
存储器,用于存储链表的处理程序,所述程序在被所述处理器读取执行时,执行如下操作:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
本申请还提供一种计算机可读取存储介质,其上存储有计算机程序,该程序被处理器执行时,实现以下步骤:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
本申请还提供一种链表的处理方法,其特征在于,包括:
至少两个线程获得指定键;
所述至少两个线程根据所述指定键查找与所述指定键对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
所述至少两个线程根据所述指定键在所述链表中查找与所述指定键对应的第一链表节点的信息;
所述至少两个线程根据所述第一链表节点的信息查找与所述第一链表节点的信息对应的键值数据;
所述至少两个线程同时对所述第一链表节点的信息对应的键值数据进行读操作和/或写操作。
与现有技术相比,本申请具有如下优点:
本申请提供的链表的处理方法,包括:获取第一键值数据;根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。采用本申请提供的方法,解决了键值存储服务系统中的热点访问的并发问题。
附图说明
图1是本申请第一实施例的流程图;
图2是本申请第一实施例涉及的HashMap中哈希表的数据存储结构示意图;
图3是本申请第一实施例涉及的具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构的示意图;
图4是本申请第二实施例的流程图。
图5是本申请第五实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请第一实施例提供一种链表的处理方法。请参看图1,该图为本申请第一实施例的流程图。以下结合图1对本申请第一实施例提供一种链表的处理方法进行详细说明。所述方法包括如下步骤:
步骤S101,获取第一键值数据。
本步骤用来获取第一键值数据,所述第一键值数据用于对链表进行处理的原始数据。所述第一键值数据可以包括键和值,也可以只包括键。
步骤S102,根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构。
本步骤用来根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;所述链表作为键值数据处理的对象。
在键值数据处理领域,一般使用HashMap来处理键值数据。HashMap可以使用不同的编程语言来实现,在本实施例中,以键值数据处理中常用的JAVA语言为例进行说明。
图2是链表节点的信息与链表节点对应的键值数据一起存储的示意图,提供了现有技术中HashMap的实现方案。下面的HashMap代码片段包含了HashMap的构造函数,哈希表的数组table定义,链表节点Entry<K,V>类的定义及其构造函数。下面结合图2及如下HashMap的示意性代码片段对于这种存储结构进行说明。
Figure BDA0001732783530000071
Figure BDA0001732783530000081
如图2所示,在HashMap中,对于键值数据是采用哈希表结构来存储的。哈希表为解决哈希冲突,一般可以采用开放定址法和链地址法等方法来解决问题。HashMap采用了链地址法。所述链地址法,就是数组加链表的结合。在每个数组元素上都有一个链表结构,根据第一键值数据的键进行哈希计算,获得哈希值,根据哈希值,获得哈希地址,即图2中数组table的下标,把数据放在对应下标数组元素对应的链表上。通常,这里的数组称为桶bucket,在所述HashMap代码片段中所述数组即为table。每个桶都有自己对应的链表,这里的链表通常被称为冲突链。链表节点的数据类型采用所述HashMap代码片段中的Entry类,每个链表节点包括hash(链表节点中键值数据中的键对应的哈希值)、key(链表节点中键值数据中的键)、value(链表节点中键值数据中的值)、next(指向下一个链表节点的指针)等数据元素。这里需要说明的是,在JAVA中没有指针的概念,这里使用next指针是为了和通用的链表描述保持一致,这里的next指针即JAVA中的next引用。本申请中所提到的指针在JAVA中即代表引用。
所述链表节点的信息包括以下至少一种信息:
链表节点的哈希值;
指向下一个链表节点的指针;
用于指向链表节点对应的键值数据的标识;
所述链表节点的信息与链表节点对应的键值数据分离存储包括:链表节点的哈希值、指向下一个链表节点的指针、用于指向链表节点对应的键值数据的标识中的至少一个信息与链表节点对应的键值数据分离存储。
所述链表节点的哈希值是指该链表节点的键值数据中的键的哈希值。所述用于指向链表节点对应的键值数据的标识用来标记所述键值数据的位置,在JAVA中一般用键值数据的引用作为指向链表节点对应的键值数据的标识。
图3是包含链表节点的信息与链表节点对应的键值数据分离存储的示意图。下面是根据图3实现的HashMap相关代码片段。
在上述代码中,用类KV的引用kv作为用于指向链表节点对应的键值数据的标识,从而实现了链表节点的信息与链表节点对应的键值数据分离存储的目的。
在HashMap中,所述根据所述第一键值数据查找与所述第一键值数据对应的链表,包括:
针对所述键进行哈希计算,获得哈希值;
根据所述哈希值,获得所述键对应的链表在哈希映射中的哈希地址;
根据所述哈希地址,在所述哈希映射中查找所述键对应的链表。
所述哈希计算可以使用哈希函数来实现。哈希函数有很多实现方式,下面是JAVA中一种哈希函数实现的示意性代码。
Figure BDA0001732783530000101
所述哈希地址,即所述键在HashMap的哈希表中对应的桶的索引。
获得哈希地址有很多方法,如直接寻址法,数字分析法,平方取中法,随机数法等。下面仅提供一种实现方案。
对于HashMap的table数组而言,数据分布需要均匀,最好数组每项都只有一个元素,数据分布稠密会导致查询速度慢,数据分布稀疏则浪费空间。计算哈希值后,若要保证table数组元素分布均匀,可以采用取模的方式。但是取模的时间消耗较大,HashMap可以采用调用下面indexFor方法获得所述桶的索引。在indexFor函数中,输入参数hash为所述哈希值,length为所述table数组的元素个数。
static int indexFor(int hash,int length){
return hash&(1ength-1);
}
所述哈希地址即所述table数组的索引,获取table数组索引后,即可得到对应的链表的表头地址,获取所述链表的表头之后,即可进行相应的链表处理。
步骤S103,根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
本步骤用来根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,可以包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中未查找到与所述第一键值数据对应的链表节点,则在所述链表中创建所述第一键值数据对应的第一链表节点;
创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储。
采用上述步骤即为HashMap中的插入操作。
在插入操作中,针对所述链表的处理,可以使用CAS操作来实现。使用CAS操作可以实现所述链表处理的无锁化。
CAS即Compare And Swap,是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(addr)、预期原值(v1)、新值(v2),其函数原型为CAS(addr,v1,v2)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。这是一种CPU支持的原子操作。
对于并发控制而言,锁是一种悲观的策略。它总是假设每一次的临界资源操作会产生冲突,因此,必须对每次操作都非常小心。如果有多个线程同时需要访问临界资源,就宁可牺牲性能让线程进行等待,所以使用锁会阻塞线程执行。
与锁相比,使用CAS会使程序看起来更加复杂一些。但由于其非阻塞性,它对死锁问题天生免疫,并且,线程间的相互影响也远远比基于锁的方式要小。更为重要的是,使用无锁的方式完全没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销,因此,它要比基于锁的方式拥有更优越的性能。
当多个线程同时使用CAS操作时,只有一个会胜出,并成功更新,其余均会失败。失败的线程不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。基于这样的原理,CAS操作即使没有锁,也可以发现其他线程对当前线程的干扰,并进行恰当的处理。
在硬件层面,大部分的现代处理器都已经支持原子化的CAS指令。在JDK5.0以后,虚拟机便可以使用这个指令来实现并发操作和并发数据结构,并且,这种操作在虚拟机中使用非常广泛。
利用CAS操作,虽然可以实现HashMap中操作无锁化,但是HashMap中被删除的数据占用的内存资源还存在着问题。所述被删除的数据占用的内存资源是指HashMap中键值数据更新或者删除后的不再被使用的内存资源。
为了实现低计算开销,对内存资源及时回收再利用,本申请提出采用RCU机制来解决HashMap中被删除的数据占用的内存资源的回收问题。下面对RCU的工作原理进行简要说明。
RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。
因此RCU实际上是一种改进的读写锁,读者几乎没有什么同步开销,它不需要锁,不使用原子指令,而且在除alpha的所有架构上也不需要内存栅(Memory Barrier),因此不会导致锁竞争,内存延迟以及流水线停滞。不需要锁也使得使用更容易,因为死锁问题就不需要考虑了。写者的同步开销比较大,它需要延迟数据结构的释放,复制被修改的数据结构,它也必须使用某种锁机制同步并行的其它写者的修改操作。读者必须提供一个信号给写者以便写者能够确定数据可以被安全地释放或修改的时机。有一个专门的垃圾收集器来探测读者的信号,一旦所有的读者都已经发送信号告知它们都不在使用被RCU保护的数据结构,垃圾收集器就调用回调函数完成最后的数据释放或修改操作。
在对所述链表处理前,执行RCU加锁操作;在对所述链表处理后,执行RCU解锁操作。所述RCU加锁操作为用户态的RCU加锁操作是指调用用户态的RCU加锁API函数,所述RCU解锁操作为用户态的RCU解锁操作是指调用用户态的RCU解锁API函数。
下面是引入了CAS以及RCU的HashMap插入操作的示意性实施代码。
在插入操作的实现中,首先构建新的包含所述键值的所述链表的链表节点副本,通过Entry<K,V>e1=new Entry<K,V>(hash,key,value,head)来实现,这里head是所述链表的原始链表表头,采用一次CAS操作,用所述链表节点副本替换所述链表的原始表头节点,作为所述链表的新的表头节点,通过CAS(addr1,head,el)来实现,addr1为指向原始表头节点的地址指针,head为原始表头节点,el是新构建的新的表头节点。这里CAS操作有可能不成功,这是由于head被其他线程修改引起的,可以读取新的head,再执行CAS操作,如此循环,直至CAS操作成功。所述新的表头节点的next指针指向原始表头节点。所述创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储是通过在链表节点中对类KV的引用实现的。
在对所述链表处理前,执行RCU加锁操作rcu_lock;在对所述链表处理后,执行RCU解锁操作rcu_unlock。所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,还可以包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据替换为所述第一键值数据;
将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储;
将所述第二键值数据替换为所述第一键值数据之后,所述第二链表节点的信息与所述第一键值数据分离存储。
采用上述步骤即为HashMap中的更新操作。在更新操作中,针对所述链表的处理,可以使用CAS操作来实现。使用CAS操作可以实现所述链表处理的无锁化。
下面的函数replace即为更新操作的示意性代码。
Figure BDA0001732783530000131
Figure BDA0001732783530000141
函数replace中,首先根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点,这是通过函数中的for循环来实现的。将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储,即第二链表节点的键值数据以类KV来存储,实现了所述第二链表节点的信息与所述第二键值数据分离存储。其次,构建包含所述键值的键值数据副本,通过KV kv=new KV(key,value)来实现,用所述键值数据副本替换所述链表中原始的键值数据,通过CAS(addr,e.kv,kv)来实现,addr是指向所述第二键值数据的地址指针,e.kv是当前第二键值数据,kv是新构建的键值数据副本。这里CAS操作有可能不成功,这是由于e.kv被其他线程修改引起的,可以读取新的e.kv,再执行CAS操作,如此循环,直至CAS操作成功。
在对所述链表处理前,执行RCU加锁操作rcu_lock;在对所述链表处理后,执行RCU解锁操作rcu_unlock。所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
所述链表中原始的键值数据在CAS操作之后采用异步垃圾机制回收。
RCU中,使用专门的垃圾收集器来探测读者的信号,一旦所有的读者都已经发送信号告知它们都不在使用被RCU保护的数据结构,垃圾收集器就调用回调函数完成最后的数据释放。所述垃圾收集器是采用异步垃圾机制的一种实现。
本申请提出链表节点的信息与链表节点对应的键值数据分离存储,优化了传统的HashMap的冲突链结构。这种链表节点的数据结构在热点更新中,不需要修改冲突链的next指针,从而避免了多线程HashMap键值数据操作中,HashMap的链表节点形成环形数据结构而导致的获取链表节点数据时进入死循环的问题。
所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,还可以包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点以及与所述第二链表节点对应的第二键值数据删除;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
采用上述步骤即为HashMap中的删除操作。在删除操作中,针对所述链表的处理,可以使用CAS操作来实现。使用CAS操作可以实现所述链表处理的无锁化。
下面的函数remove即为删除操作的示意性代码。
Figure BDA0001732783530000151
Figure BDA0001732783530000161
函数remove中,首先根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点,这是通过函数中的while循环实现的。将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储,即第二链表节点的键值数据以数据结构KV来存储,实现了所述第二链表节点的信息与所述第二键值数据分离存储。其次,找到待删除的链表节点后,判断待删除节点是否是链表的表头,若是表头,则调用CAS(addr,e,next)实现表头节点的删除,addr是指向表头节点的地址指针,e是待删除的表头节点,next是待删除的表头节点的下一个节点。这里CAS操作有可能不成功,这是由于e被其他线程修改引起的,可以读取新的e,再执行CAS操作,如此循环,直至CAS操作成功。若待删除节点不是链表的表头,则通过调用CAS(addr1,e,next),实现删除节点的操作,addr1是指向待删除节点的地址指针,e是待删除的表头节点,next是待删除的表头节点的下一个节点。这里CAS操作有可能不成功,这是由于e被其他线程修改引起的,可以读取新的e,再执行CAS操作,如此循环,直至CAS操作成功。
在对所述链表处理前,执行RCU加锁操作rcu_lock;在对所述链表处理后,执行RCU解锁操作rcu_unlock。所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
所述链表中原始的键值数据在CAS操作之后采用异步垃圾机制回收。
RCU中,使用专门的垃圾收集器来探测读者的信号,一旦所有的读者都已经发送信号告知它们都不在使用被RCU保护的数据结构,垃圾收集器就调用回调函数完成最后的数据释放。所述垃圾收集器是采用异步垃圾机制的一种实现。
所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,还可以包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则获取所述第二链表节点对应的第二键值数据,所述第二链表节点与所述第二键值数据分离存储。
采用上述步骤即为HashMap中的读取操作。下面的函数get即为读取操作的示意性代码。
Figure BDA0001732783530000171
函数get中,首先根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点,这是通过函数中的for循环实现的。如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则获取所述第二链表节点对应的第二键值数据,通过return e.value实现,所述第二链表节点与所述第二键值数据分离存储。
在对所述链表处理前,执行RCU加锁操作rcu_lock;在对所述链表处理后,执行RCU解锁操作rcu_unlock。所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
在上述的实施例中,提供了一种链表的处理方法,与之相对应的,本申请还提供一种链表的处理装置。请参看图4,其为本申请的一种链表的处理装置实施例的流程图。由于本实施例,即第二实施例,基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种链表的处理装置,包括获取单元401,用于获取第一键值数据;查找单元402,用于根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;处理单元403,用于根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
优选的,所述第一键值数据包括键;所述查找单元具体用于:
针对所述键进行哈希计算,获得哈希值;
根据所述哈希值,获得所述键对应的链表在哈希映射中的哈希地址;
根据所述哈希地址,在所述哈希映射中查找所述键对应的链表。
优选的,所述链表节点的信息包括以下至少一种信息:
链表节点的哈希值;
指向下一个链表节点的指针;
用于指向链表节点对应的键值数据的标识;
所述链表节点的信息与链表节点对应的键值数据分离存储包括:链表节点的哈希值、指向下一个链表节点的指针、用于指向链表节点对应的键值数据的标识中的至少一个信息与链表节点对应的键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中未查找到与所述第一键值数据对应的链表节点,则在所述链表中创建所述第一键值数据对应的第一链表节点;
创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据替换为所述第一键值数据;
将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储;
将所述第二键值数据替换为所述第一键值数据之后,所述第二链表节点的信息与所述第一键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点以及与所述第二链表节点对应的第二键值数据删除;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
优选的,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据中的值返回;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
优选的,所述处理单元具体用于:根据所述第一键值数据,按照所述链表结构,对所述链表进行CAS处理。
优选的,还包括:
RCU处理单元,用于在对所述链表处理前,执行RCU加锁操作;在对所述链表处理后,执行RCU解锁操作。
优选的,所述RCU处理单元还用于回收在对所述链表进行处理过程中被删除的数据占用的内存资源。
优选的,所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
本申请第三实施例提供一种电子设备,所述电子设备包括:
处理器;
存储器,用于存储链表的处理的程序,所述程序在被所述处理器读取执行时,执行如下操作:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
本申请第四实施例提供一种计算机可读取存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现以下步骤:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
本申请第五实施例提供一种链表的处理方法,包括:
至少两个线程获得指定键;
所述至少两个线程根据所述指定键查找与所述指定键对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
所述至少两个线程根据所述指定键在所述链表中查找与所述指定键对应的第一链表节点的信息;
所述至少两个线程根据所述第一链表节点的信息查找与所述第一链表节点的信息对应的键值数据;
所述至少两个线程同时对所述第一链表节点的信息对应的键值数据进行读操作和/或写操作。
请参看图5,其为本申请的一种链表的处理方法实施例的示意图。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个操作器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (25)

1.一种链表的处理方法,其特征在于,包括:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
2.根据权利要求1所述的方法,其特征在于,所述第一键值数据包括键,所述根据所述第一键值数据查找与所述第一键值数据对应的链表,包括:
针对所述键进行哈希计算,获得哈希值;
根据所述哈希值,获得所述键对应的链表在哈希映射中的哈希地址;
根据所述哈希地址,在所述哈希映射中查找所述键对应的链表。
3.根据权利要求1所述的方法,其特征在于,所述链表节点的信息包括以下至少一种信息:
链表节点的哈希值;
指向下一个链表节点的指针;
用于指向链表节点对应的键值数据的标识;
所述链表节点的信息与链表节点对应的键值数据分离存储包括:链表节点的哈希值、指向下一个链表节点的指针、用于指向链表节点对应的键值数据的标识中的至少一个信息与链表节点对应的键值数据分离存储。
4.根据权利要求1所述的方法,其特征在于,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中未查找到与所述第一键值数据对应的链表节点,则在所述链表中创建所述第一键值数据对应的第一链表节点;
创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储。
5.根据权利要求1所述的方法,其特征在于,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据替换为所述第一键值数据;
将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储;
将所述第二键值数据替换为所述第一键值数据之后,所述第二链表节点的信息与所述第一键值数据分离存储。
6.根据权利要求1所述的方法,其特征在于,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点以及与所述第二链表节点对应的第二键值数据删除;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
7.根据权利要求1所述的方法,其特征在于,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则获取所述第二链表节点对应的第二键值数据,所述第二链表节点与所述第二键值数据分离存储。
8.根据权利要求1所述的方法,其特征在于,所述根据所述第一键值数据,按照所述链表结构,对所述链表进行处理,包括:根据所述第一键值数据,按照所述链表结构,对所述链表进行CAS处理。
9.根据权利要求1所述的方法,其特征在于,还包括:
在对所述链表处理前,执行RCU加锁操作;
在对所述链表处理后,执行RCU解锁操作。
10.根据权利要求9所述的方法,其特征在于,还包括:采用RCU提供的异步回收机制回收在对所述链表进行处理过程中被删除的数据占用的内存资源。
11.根据权利要求9所述的方法,其特征在于,所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
12.一种链表的处理装置,其特征在于,包括:
获取单元,用于获取第一键值数据;
查找单元,用于根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
处理单元,用于根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
13.根据权利要求12所述的装置,其特征在于,所述第一键值数据包括键;所述查找单元具体用于:
针对所述键进行哈希计算,获得哈希值;
根据所述哈希值,获得所述键对应的链表在哈希映射中的哈希地址;
根据所述哈希地址,在所述哈希映射中查找所述键对应的链表。
14.根据权利要求12所述的装置,其特征在于,所述链表节点的信息包括以下至少一种信息:
链表节点的哈希值;
指向下一个链表节点的指针;
用于指向链表节点对应的键值数据的标识;
所述链表节点的信息与链表节点对应的键值数据分离存储包括:链表节点的哈希值、指向下一个链表节点的指针、用于指向链表节点对应的键值数据的标识中的至少一个信息与链表节点对应的键值数据分离存储。
15.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中未查找到与所述第一键值数据对应的链表节点,则在所述链表中创建所述第一键值数据对应的第一链表节点;
创建第一链表节点之后,所述第一链表节点的信息与所述第一键值数据分离存储。
16.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据替换为所述第一键值数据;
将所述第二键值数据替换为所述第一键值数据之前,所述第二链表节点的信息与所述第二键值数据分离存储;
将所述第二键值数据替换为所述第一键值数据之后,所述第二链表节点的信息与所述第一键值数据分离存储。
17.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点以及与所述第二链表节点对应的第二键值数据删除;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
18.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于:
根据所述第一键值数据在所述链表中查找与所述第一键值数据对应的链表节点;
如果在所述链表中查找到与所述第一键值数据对应的第二链表节点,则将所述第二链表节点对应的第二键值数据中的值返回;
将所述第二链表节点以及与所述第二键值数据删除之前,所述第二链表节点与所述第二键值数据分离存储。
19.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于:根据所述第一键值数据,按照所述链表结构,对所述链表进行CAS处理。
20.根据权利要求12所述的装置,其特征在于,还包括:
RCU处理单元,用于在对所述链表处理前,执行RCU加锁操作;在对所述链表处理后,执行RCU解锁操作。
21.根据权利要求20所述的装置,其特征在于,所述RCU处理单元还用于回收在对所述链表进行处理过程中被删除的数据占用的内存资源。
22.根据权利要求20所述的装置,其特征在于,所述RCU加锁操作为用户态的RCU加锁操作,所述RCU解锁操作为用户态的RCU解锁操作。
23.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,用于存储链表的处理程序,所述程序在被所述处理器读取执行时,执行如下操作:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
24.一种计算机可读取存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现以下步骤:
获取第一键值数据;
根据所述第一键值数据查找与所述第一键值数据对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
根据所述第一键值数据,按照所述链表结构,对所述链表进行处理。
25.一种链表的处理方法,其特征在于,包括:
至少两个线程获得指定键;
所述至少两个线程根据所述指定键查找与所述指定键对应的链表,所述链表具有链表节点的信息与链表节点对应的键值数据分离存储的链表结构;
所述至少两个线程根据所述指定键在所述链表中查找与所述指定键对应的第一链表节点的信息;
所述至少两个线程根据所述第一链表节点的信息查找与所述第一链表节点的信息对应的键值数据;
所述至少两个线程同时对所述第一链表节点的信息对应的键值数据进行读操作和/或写操作。
CN201810787497.4A 2018-07-17 2018-07-17 一种链表的处理方法及装置 Active CN110727675B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810787497.4A CN110727675B (zh) 2018-07-17 2018-07-17 一种链表的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810787497.4A CN110727675B (zh) 2018-07-17 2018-07-17 一种链表的处理方法及装置

Publications (2)

Publication Number Publication Date
CN110727675A true CN110727675A (zh) 2020-01-24
CN110727675B CN110727675B (zh) 2023-06-27

Family

ID=69217623

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810787497.4A Active CN110727675B (zh) 2018-07-17 2018-07-17 一种链表的处理方法及装置

Country Status (1)

Country Link
CN (1) CN110727675B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737297A (zh) * 2020-06-15 2020-10-02 中国工商银行股份有限公司 链路聚合调用信息的处理方法及装置
CN111814007A (zh) * 2020-07-31 2020-10-23 新华三信息安全技术有限公司 双向链表数据处理方法、装置、设备及机器可读存储介质
CN111898002A (zh) * 2020-08-07 2020-11-06 人教数字出版有限公司 一种单向链表的生成方法、读取方法及装置
CN111913978A (zh) * 2020-09-02 2020-11-10 上海优扬新媒信息技术有限公司 一种区块删除方法、装置及系统
CN112765917A (zh) * 2021-01-08 2021-05-07 华东师范大学 基于内存回收方案的非阻塞算法的形式化验证方法
CN113791916A (zh) * 2021-11-17 2021-12-14 支付宝(杭州)信息技术有限公司 对象更新、读取方法及装置
CN114064984A (zh) * 2022-01-14 2022-02-18 浙商银行股份有限公司 一种基于稀疏数组链表的世界状态增量更新方法及装置
CN115374299A (zh) * 2022-10-24 2022-11-22 杭州悦数科技有限公司 分布式图数据库中可达性索引的分层构建方法和系统
CN116996438A (zh) * 2023-09-22 2023-11-03 新华三技术有限公司 流表管理方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120102298A1 (en) * 2010-10-20 2012-04-26 Microsoft Corporation Low RAM Space, High-Throughput Persistent Key-Value Store using Secondary Memory
US20120323970A1 (en) * 2011-06-18 2012-12-20 Microsoft Corporation Dynamic lock-free hash tables
CN105095261A (zh) * 2014-05-08 2015-11-25 北京奇虎科技有限公司 数据插入方法和装置
CN106874383A (zh) * 2017-01-10 2017-06-20 清华大学 一种分布式文件系统元数据的解耦合分布方法
CN107659626A (zh) * 2017-09-11 2018-02-02 上海交通大学 面向临时元数据的分离存储方法
CN108140009A (zh) * 2015-10-13 2018-06-08 微软技术许可有限责任公司 分布式自主式基于rdma的b树键值管理器
CN108205577A (zh) * 2016-12-20 2018-06-26 阿里巴巴集团控股有限公司 一种数组构建、数组查询的方法、装置及电子设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120102298A1 (en) * 2010-10-20 2012-04-26 Microsoft Corporation Low RAM Space, High-Throughput Persistent Key-Value Store using Secondary Memory
US20120323970A1 (en) * 2011-06-18 2012-12-20 Microsoft Corporation Dynamic lock-free hash tables
CN105095261A (zh) * 2014-05-08 2015-11-25 北京奇虎科技有限公司 数据插入方法和装置
CN108140009A (zh) * 2015-10-13 2018-06-08 微软技术许可有限责任公司 分布式自主式基于rdma的b树键值管理器
CN108205577A (zh) * 2016-12-20 2018-06-26 阿里巴巴集团控股有限公司 一种数组构建、数组查询的方法、装置及电子设备
CN106874383A (zh) * 2017-01-10 2017-06-20 清华大学 一种分布式文件系统元数据的解耦合分布方法
CN107659626A (zh) * 2017-09-11 2018-02-02 上海交通大学 面向临时元数据的分离存储方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
康超凡;: "基于MTF规则的非阻塞自组织链表" *

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737297A (zh) * 2020-06-15 2020-10-02 中国工商银行股份有限公司 链路聚合调用信息的处理方法及装置
CN111737297B (zh) * 2020-06-15 2023-08-25 中国工商银行股份有限公司 链路聚合调用信息的处理方法及装置
CN111814007B (zh) * 2020-07-31 2023-03-31 新华三信息安全技术有限公司 双向链表数据处理方法、装置、设备及机器可读存储介质
CN111814007A (zh) * 2020-07-31 2020-10-23 新华三信息安全技术有限公司 双向链表数据处理方法、装置、设备及机器可读存储介质
CN111898002A (zh) * 2020-08-07 2020-11-06 人教数字出版有限公司 一种单向链表的生成方法、读取方法及装置
CN111898002B (zh) * 2020-08-07 2024-03-29 人教数字出版有限公司 一种单向链表的生成方法、读取方法及装置
CN111913978A (zh) * 2020-09-02 2020-11-10 上海优扬新媒信息技术有限公司 一种区块删除方法、装置及系统
CN111913978B (zh) * 2020-09-02 2023-07-25 度小满科技(北京)有限公司 一种区块删除方法、装置及系统
CN112765917B (zh) * 2021-01-08 2022-07-08 华东师范大学 基于内存回收方案的非阻塞算法的形式化验证方法
CN112765917A (zh) * 2021-01-08 2021-05-07 华东师范大学 基于内存回收方案的非阻塞算法的形式化验证方法
CN113791916A (zh) * 2021-11-17 2021-12-14 支付宝(杭州)信息技术有限公司 对象更新、读取方法及装置
CN114064984A (zh) * 2022-01-14 2022-02-18 浙商银行股份有限公司 一种基于稀疏数组链表的世界状态增量更新方法及装置
CN115374299A (zh) * 2022-10-24 2022-11-22 杭州悦数科技有限公司 分布式图数据库中可达性索引的分层构建方法和系统
CN116996438A (zh) * 2023-09-22 2023-11-03 新华三技术有限公司 流表管理方法及装置
CN116996438B (zh) * 2023-09-22 2023-12-22 新华三技术有限公司 流表管理方法及装置

Also Published As

Publication number Publication date
CN110727675B (zh) 2023-06-27

Similar Documents

Publication Publication Date Title
CN110727675B (zh) 一种链表的处理方法及装置
US8250047B2 (en) Hybrid multi-threaded access to data structures using hazard pointers for reads and locks for updates
US8473950B2 (en) Parallel nested transactions
KR101025354B1 (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
US8495641B2 (en) Efficiently boosting priority of read-copy update readers while resolving races with exiting and unlocking processes
US8117605B2 (en) Method and apparatus for improving transactional memory interactions by tracking object visibility
US8666952B2 (en) Optimized deletion and insertion for high-performance resizable RCU-protected hash tables
EP3701377B1 (en) Method and apparatus for updating shared data in a multi-core processor environment
US20100179971A1 (en) Concurrent, Lock-Free Object Copying
US20210255889A1 (en) Hardware Transactional Memory-Assisted Flat Combining
US11204813B2 (en) System and method for multidimensional search with a resource pool in a computing environment
US9015133B2 (en) Optimized resizing for RCU-protected hash tables
US10303383B1 (en) System and method for implementing non-blocking, concurrent hash tables
US8095731B2 (en) Mutable object caching
Gidenstam et al. Cache-aware lock-free queues for multiple producers/consumers and weak memory consistency
US20230252081A1 (en) Scalable range locks
Tamir et al. A heap-based concurrent priority queue with mutable priorities for faster parallel algorithms
Blelloch et al. Concurrent reference counting and resource management in wait-free constant time
CN116257359A (zh) 数据处理方法及装置、存储介质及电子设备
US20100223433A1 (en) Configurable object graph traversal with redirection for garbage collection
Lamar et al. Lock-free transactional vector
Timnat et al. A practical transactional memory interface
US11366807B2 (en) Hash-based data structure
Singh et al. Efficient hardware primitives for immediate memory reclamation in optimistic data structures
JP2022522363A (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