一种无锁散列方法、装置、设备及介质制造方法及图纸

技术编号:30805166 阅读:15 留言:0更新日期:2021-11-16 08:12
本说明书实施例提供一种无锁散列方法、装置、设备及介质,无锁散列方法包括:构建用于存储数据集合中的数据的散列表;对任一数据,确定该数据对应的索引值,根据索引值确定数据对应的第一存储位置;若第一存储位置是否正在存储数据,且第一存储位置已存储的数据与该数据相同,则更新第一存储位置对应的数据量;若第一存储位置已存储的数据与数据不同,则将数据存储至未存储数据的存储位置或将数据存储至已存储与该数据相同的数据的第二存储位置;若第一存储位置未存储数据,则将数据存储至第一存储位置;对任一数据,若有多个不同存储位置存储该数据,则保留一个存储位置用于存储该数据,并更新所保留的用于存储该数据的存储位置对应的数据量。对应的数据量。对应的数据量。

【技术实现步骤摘要】
一种无锁散列方法、装置、设备及介质


[0001]本申请涉及计算机
,尤其涉及一种无锁散列方法、装置、设备及介质。

技术介绍

[0002]现有技术中,散列表是一种常用的数据结构,广泛应用于数据处理领域。但是在建立散列表的过程中,若有多线程并行向散列表的同一地址写入数据,则其中一个线程向该地址写入数据时,会对该地址加锁,需要向该地址写入数据的其他线程必须排队等待该线程向该地址写入数据完成后,下一个线程才能访问该地址,即多个线程必须串行向该地址写入数据。如此一来,造成线程资源的浪费,使得需要耗费较长的时间和较多的计算资源才能建立散列表。
[0003]有鉴于此,需要更高效的散列表建立方案。

技术实现思路

[0004]本说明书实施例提供一种无锁散列方法、装置、设备及介质,用以解决如何更高效地建立散列表的技术问题。
[0005]为解决上述技术问题,本说明书实施例提供如下技术方案:本说明书实施例提供一种无锁散列方法,包括:获取数据集合,构建用于存储所述数据集合中的数据的散列表,所述散列表中包含预设数量个存储位置;对任一数据,对该数据进行散列,包括:对任一数据,确定该数据对应的索引值,根据所述索引值确定该数据对应的第一存储位置,判断所述第一存储位置是否正在存储数据;若所述第一存储位置正在存储数据,且所述第一存储位置已存储的数据与该数据相同,则更新所述第一存储位置对应的数据量;若所述第一存储位置已存储的数据与该数据不同,则将该数据存储至未存储数据的存储位置或将该数据存储至已存储与该数据相同的数据的第二存储位置;若所述第一存储位置未存储数据,则将该数据存储至所述第一存储位置;对所述数据集合中的所有数据进行散列后,对所述散列表进行查重,以使:对任一数据,若有多个不同存储位置存储该数据,则保留一个存储位置用于存储该数据,并根据存储该数据的所述多个不同存储位置对应的数据量,更新所保留的用于存储该数据的存储位置对应的数据量。
[0006]本说明书实施例提供一种无锁散列装置,包括:建表模块,用于获取数据集合,构建用于存储所述数据集合中的数据的散列表,所述散列表中包含预设数量个存储位置;散列模块,用于对任一数据,对该数据进行散列,包括:对任一数据,确定该数据对应的索引值,根据所述索引值确定该数据对应的第一存储位置,判断所述第一存储位置是否正在存储数据;若所述第一存储位置正在存储数据,且所述第一存储位置已存储的数据
与该数据相同,则更新所述第一存储位置对应的数据量;若所述第一存储位置已存储的数据与该数据不同,则将该数据存储至未存储数据的存储位置或将该数据存储至已存储与该数据相同的数据的第二存储位置;若所述第一存储位置未存储数据,则将该数据存储至所述第一存储位置;查重模块,用于对所述数据集合中的所有数据进行散列后,对所述散列表进行查重,以使:对任一数据,若有多个不同存储位置存储该数据,则保留一个存储位置用于存储该数据,并根据存储该数据的所述多个不同存储位置对应的数据量,更新所保留的用于存储该数据的存储位置对应的数据量。
[0007]本说明书实施例提供一种无锁散列设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够执行上述的无锁散列方法。
[0008]本说明书实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现上述的无锁散列方法。
[0009]本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:对任一数据,可以确定该数据对应的首选存储位置。即使该数据正由对应线程写入散列表,其他线程也可以读取该数据,其他线程根据读取情况选择是否需要将其对应的待存储数据存入散列表以及选择散列表的存储位置。这样一来,即使有线程正在向散列表存入数据,也不会将散列表的存储位置锁住,不影响其他线程读取正在存入的数据,也不影响其他线程根据读取情况选择是否需要将其对应的待存储数据存入散列表以及选择散列表的存储位置,从而实现了多线程对各自对应的数据的并行散列,提高散列效率。
附图说明
[0010]为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对本说明书实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面介绍的附图仅仅是本说明书中记载的实施例可能涉及的部分附图,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0011]图1是本说明书第一个实施例中的无锁散列方法的执行主体示意图。
[0012]图2是本说明书第一个实施例中的无锁散列方法的流程示意图。
[0013]图3是本说明书第一个实施例中线程冲突时的一种操作示意图。
[0014]图4是本说明书第一个实施例中线程冲突时的另一种操作示意图。
[0015]图5是本说明书第一个实施例中的查重示意图。
[0016]图6是本说明书第二个实施例中的无锁散列装置的结构示意图。
具体实施方式
[0017]为了使本
的人员更好地理解本说明书中的技术方案,下面将结合本说明
书实施例的附图,对本说明书实施例的技术方案清楚、完整地进行描述。显然,本说明书所描述的实施例仅仅是本申请的部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0018]现有技术中,散列表是一种常用的数据结构,广泛应用于数据处理领域。但是在建立散列表的过程中,若有多线程并行向散列表的同一地址写入数据,则其中一个线程向该地址写入数据时,会对该地址加锁,需要向该地址写入数据的其他线程必须排队等待该线程向该地址写入数据完成后,下一个线程才能访问该地址,即多个线程必须串行向该地址写入数据。如此一来,造成线程资源的浪费,使得需要耗费较长的时间和较多的计算资源才能建立散列表。
[0019]本说明书第一个实施例(以下简称“实施例一”)提供了一种无锁散列方法,实施例一的执行主体可以是终端(包括但不限于手机、计算机、pad、电视)或者服务器或者操作系统或者应用程序或者无锁散列平台或者无锁散列系统等,即执行主体可以是多种多样的,可以根据需要设置、使用或者变换执行主体。另外,也可以有第三方应用程序协助所述执行主体执行实施例一。例如图1所示,可以由服务器来执行实施例一中的无锁散列方法,并且可以在(用户所持有的)终端上安装(与所述服务器)相对应的应用程序,终端或应用程序与服务器之间可以进行数据传输,通过终端或应用程序来进行数据的采集或输入或输出或(向用户)进行页面或信息处理,从而辅助服务器执行实施例一中的无锁散列方法。
[0020]如图2所示,实施例一提供的无锁散列方法包括:S101:(执行主体)获取数据集合,构建用于存储所述数据集合中的数据的散列表,所述散列表中包含预设数量个存储本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种无锁散列方法,其特征是,包括:获取数据集合,构建用于存储所述数据集合中的数据的散列表,所述散列表中包含预设数量个存储位置;对任一数据,对该数据进行散列,包括:对任一数据,确定该数据对应的索引值,根据所述索引值确定该数据对应的第一存储位置,判断所述第一存储位置是否正在存储数据;若所述第一存储位置正在存储数据,且所述第一存储位置已存储的数据与该数据相同,则更新所述第一存储位置对应的数据量;若所述第一存储位置已存储的数据与该数据不同,则将该数据存储至未存储数据的存储位置或将该数据存储至已存储与该数据相同的数据的第二存储位置;若所述第一存储位置未存储数据,则将该数据存储至所述第一存储位置;对所述数据集合中的所有数据进行散列后,对所述散列表进行查重,以使:对任一数据,若有多个不同存储位置存储该数据,则保留一个存储位置用于存储该数据,并根据存储该数据的所述多个不同存储位置对应的数据量,更新所保留的用于存储该数据的存储位置对应的数据量。2.如权利要求1所述的方法,其特征是,对所述散列表进行查重包括:确定所述散列表中的一个或多个非空存储位置组,任一非空存储位置组包含连续的一个或多个非空存储位置;其中,非空存储位置为存储有数据的存储位置,空存储位置为未存储数据的存储位置;对各个非空存储位置组进行查重。3.如权利要求2所述的方法,其特征是,对各个非空存储位置组进行查重包括:对任一非空存储位置组,按照该非空存储位置组内的存储位置序号,依次对该非空存储位置组内的存储位置上存储的数据进行查重,以使对任一数据,若该非空存储位置组内有多个不同存储位置存储该数据,则保留一个存储位置用于存储该数据,并根据存储该数据的所述多个不同存储位置对应的数据量,更新所保留的用于存储该数据的存储位置对应的数据量。4.如权利要求1所述的方法,其特征是,对所述散列表进行查重包括:为散列表中的每个存储位置生成对应的查重线程;对任一查重线程,若该查重线程对应的存储位置为空,则释放该查重线程;若该查重线程对应的存储位置的前一个存储位置非空,则释放该查重线程;对于任一保留的查重线程,执行该查重线程,以便对该查重线程对应的非空存储位置组进行查重,以使若该查重线程对应的非空存储位置组内有多个不同存储位置存储该数据,则保留一个存储位置用于存储该数据,并根据存储该数据的所述多个不同存储位置对应的数据量,更新所保留的用于存储该数据的存储位置对应的数据量;其中,该查重线程对应的非空存储位置组为该查重线程对应的非空存储位置所在的非空存储位置组,任一非空存储位置组包含连续的一个或多个非空存储位置;非空存储位置为存储有数据的存储位置,空存储位置为未存储数据的存储位置。5.如权利要求1所述的方法,其特征是,将该数据存储至未存...

【专利技术属性】
技术研发人员:黄缚鹏李雨鑫曲坛郭丽
申请(专利权)人:天津易赋诊互联网医院有限公司
类型:发明
国别省市:

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

1