哈希表的数据处理方法、装置、设备、介质和程序产品与流程

文档序号:36721471发布日期:2024-01-16 12:24阅读:21来源:国知局
本技术涉及数据处理,尤其涉及一种哈希表的数据处理方法、装置、设备、介质和程序产品。
背景技术
::1、散列表(hash table,也叫哈希表)是根据关键字值(key-value)而直接进行访问的数据结构。它通过把关键字值映射到表中一个位置来访问记录,以加快查找的速度。其中,关键字(key)有可能存在重复的情况,为此通常会在每个哈希桶上挂一个链表来存储关键字(key)相同的值(value)。2、现有技术中,在多线程并发的插入、查询和删除时,通常需要对哈希桶中的链表进行加锁,加锁之后的链表只允许一个线程访问以保证线程安全。3、但是,对哈希桶中的链表均进行加锁会导致线程之间的锁竞争非常严重,并发执行的线程变成了顺序执行,执行速度显著下降,而且复杂的加锁机制会给系统带来很大的开销,最终导致系统性能降低。技术实现思路1、本技术提供一种哈希表的数据处理方法、装置、设备、介质和程序产品,用于解决现有多线程并发访问哈希表时,加锁机制占用系统开销,降低系统性能的问题。2、第一方面,本技术实施例提供一种哈希表的数据处理方法,哈希表包括有至少一个哈希桶,所述哈希桶包括有固定槽位和链表,该方法包括:3、在所述哈希桶存在多线程并发的数据处理操作时,获取所述固定槽位中存储的当前值,所述固定槽位通过原子变量进行数值存储,所述数据处理操作包括对象插入、对象删除和对象查找中的至少一种;4、根据所述当前值,获取所述固定槽位的占用状态;5、从并发的多线程中确定出待执行的目标线程;6、根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作,其中,若在所述链表中执行所述目标线程的数据处理操作,则在所述链表执行所述数据处理操作前,对所述链表进行加锁,加锁后的链表用于限制所述目标线程之外的其他线程在所述加锁后的链表执行所述数据处理操作。7、在第一方面的一种可能设计中,所述根据所述当前值,获取所述固定槽位的占用状态,包括:8、确定所述当前值是否为预设初始值;9、若所述当前值为所述预设初始值,则确定所述固定槽位未被占用;10、若所述当前值不为所述预设初始值,则确定所述固定槽位被占用。11、在第一方面的另一种可能设计中,若所述数据处理操作为对象插入,则所述根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作,包括:12、在所述固定槽位未被占用时,获取待插入对象;13、将所述固定槽位中存储的当前值更新为所述待插入对象;14、将加锁后的链表中与所述待插入对象相同的目标对象移除。15、在第一方面的再一种可能设计中,所述根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作,包括:16、在所述固定槽位被占用时,获取所述固定槽位中存储的对象的关键字;17、确定所述固定槽位中存储的对象的关键字是否与所述待插入对象的关键字相同;18、若所述固定槽位中存储的对象的关键字与所述待插入对象的关键字不相同,则存储所述待插入对象至所述加锁后的链表中。19、在第一方面的又一种可能设计中,若所述数据处理操作为对象查找,则所述根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作,包括:20、在所述固定槽位被占用时,获取存储在所述固定槽位中的对象的关键字和待查找对象的关键字;21、确定存储在所述固定槽位中的对象的关键字是否与所述待查找对象的关键字相同;22、若存储在所述固定槽位中的对象的关键字与所述待查找对象的关键字不相同,则在所述加锁后的链表中查找所述待查找对象;23、若存储在所述固定槽位中的对象的关键字与所述待查找对象的关键字相同,则获取存储在所述固定槽位中的所述对象作为所述待查找对象。24、在第一方面的又一种可能设计中,若所述数据处理操作为对象删除,则所述根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作,包括:25、在所述固定槽位未被占用时,获取待删除对象;26、在所述加锁后的链表中查找所述待删除对象并删除。27、在第一方面的又一种可能设计中,所述根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作,包括:28、在所述固定槽位被占用时,获取存储在所述固定槽位中的对象的关键字;29、确定存储在所述固定槽位中的对象的关键字是否与所述待删除对象的关键字相同;30、若存储在所述固定槽位中的对象的关键字与所述待删除对象的关键字不相同,则在所述加锁后的链表中查找所述待删除对象并删除;31、若存储在所述固定槽位中的对象的关键字与所述待删除对象的关键字相同,则将所述当前值更新为所述预设初始值。32、在第一方面的又一种可能设计中,所述根据所述占用状态,在所述固定槽位和/或所述链表中执行所述目标线程的数据处理操作之后,所述方法还包括:对所述链表进行解锁。33、在第一方面的又一种可能设计中,在所述固定槽位执行所述目标线程的数据处理操作,包括:通过原子操作在所述固定槽位执行所述目标线程的数据处理操作。34、第二方面,本技术实施例提供一种哈希表的数据处理装置,包括:35、数值获取模块,用于在哈希桶存在多线程并发的数据处理操作时,获取固定槽位中存储的当前值,所述固定槽位通过原子变量进行数值存储,所述数据处理操作包括对象插入、对象删除和对象查找中的至少一种;36、状态获取模块,用于根据所述当前值,获取所述固定槽位的占用状态;37、线程确定模块,用于从并发的多线程中确定出待执行的目标线程;38、操作执行模块,用于根据所述占用状态,在所述固定槽位和/或链表中执行所述目标线程的数据处理操作,其中,在所述链表中执行所述数据处理操作前,对所述链表进行加锁,加锁后的链表用于限制所述目标线程之外的其他线程在所述加锁后的链表执行中所述数据处理操作。39、第三方面,本技术实施例提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,以实现如上述的方法。40、第四方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机指令,所述计算机指令被处理器执行时用于实现上述的方法。41、第五方面,本技术实施例提供一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现上述的方法。42、本技术实施例提供的哈希表的数据处理方法、装置、设备、介质和程序产品,通过在哈希桶下挂一个固定槽位以及链表,先基于固定槽位的当前值确定固定槽位是否被占用,然后根据固定槽位的占用状态确定是否需要进一步在链表中执行线程操作,如果需要在链表中执行线程操作,则再对链表进行加锁,如此在只涉及到固定槽位的操作场景时就可以减少锁的使用,保证设备性能。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1