Concurrent Deterministic Skiplist and Other Data Structures

本文设计并评估了一种适用于多核 NUMA 架构的并发确定性跳表,同时对比了无锁队列与哈希表实现的性能,提出了优化内存管理的策略,并建议通过分层使用并发数据结构来减少远程节点访问以降低内存延迟。

Aparna Sasidharan

发布于 2026-03-06
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文主要讲的是如何在超级计算机(拥有成百上千个处理核心)上,让几种常用的“数据整理工具”跑得更快、更稳。

想象一下,你经营着一个巨大的图书馆(这就是计算机的内存),里面有海量的书籍(数据)。现在,你有成千上万个图书管理员(CPU 核心)同时在工作,他们要不停地找书、放新书、或者把旧书扔掉。

如果管理不善,管理员们就会在书架间撞来撞去,或者因为找不到书而到处乱跑,导致效率极低。这篇论文就是为了解决这些混乱,设计了一套更聪明的“图书馆管理规则”。

以下是论文核心内容的通俗解读:

1. 核心挑战:大家挤在一起,怎么不吵架?

在普通的电脑上,管理员少,大家排队干活就行。但在超级计算机(NUMA 架构)上,核心太多,而且每个核心离“仓库”(内存)的距离不一样。

  • 问题:如果所有管理员都去同一个仓库取书,路就会堵死(内存访问冲突)。
  • 目标:设计一种方法,让每个管理员都能在自己的“小仓库”里快速干活,偶尔去大仓库取货时也不堵车。

2. 三大法宝(三种数据结构)

论文重点测试了三种整理数据的方法,并给它们穿上了“并发加速衣”:

A. 跳表(Skiplist):像“高速公路”一样的书架

  • 普通书架:找一本书,你得从第一排开始一本本数,很慢(像走楼梯)。
  • 跳表:它在书架旁边修了多层高速公路
    • 第一层是普通路,每本书都有。
    • 第二层是快速路,每隔几本书有一个出口。
    • 第三层是超高速路,间隔更远。
    • 找书时:先上高速路快速接近目标,再下高速走小路精准找到。
  • 论文的创新
    • 以前的跳表是“随机”修路的(像掷骰子决定哪层有路),虽然快,但有时候运气不好路修得不好。
    • 作者设计了一种**“确定性跳表”**(1-2-3-4 树),就像按照严格的数学公式修路,保证无论怎么找,速度都是稳定的。
    • 结果:虽然这种“严格修路”的方法在极端情况下(比如很多人同时放书)有点慢,但它非常稳定,而且作者发现,对于海量数据,随机跳表(掷骰子版)反而因为更灵活,跑得更快。

B. 无锁队列(Lock-free Queue):像“流水线”一样的传送带

  • 场景:管理员们需要把书从一个地方运到另一个地方(负载均衡)。
  • 传统做法:大家排队,一个人拿完,下一个人才能拿(有锁,容易堵)。
  • 论文的做法
    • 把书放在成块的托盘(内存块)上,而不是一个个散放。
    • 管理员们像在玩“贪吃蛇”游戏,直接推托盘,不需要互相打招呼(无锁)。
    • 关键点:作者设计了一套**“回收站”系统**。用过的托盘不扔掉,而是洗洗干净放回仓库备用。这大大减少了去“采购部”(操作系统内存分配)买新托盘的时间,让流水线转得飞快。

C. 哈希表(Hash Table):像“智能快递柜”

  • 场景:根据书的编号(Key)直接找到书的位置。
  • 问题:如果两个书的编号算出来是同一个柜子(冲突),柜子就塞不下了。
  • 论文的做法
    • 单层柜子:如果塞满了,整个柜子都要重新整理(重哈希),这时候所有管理员都得停下来等,效率极低。
    • 双层柜子(创新点):作者设计了一种**“主柜 + 副柜”**的结构。
      • 主柜里如果塞满了,就自动在旁边开一个“副柜”专门放这些冲突的书。
      • 这样,当主柜在整理时,副柜还能继续工作,互不干扰。
    • 结果:这种“分层管理”让系统在核心数量激增时,依然能保持高速运转,比传统的 Intel 库(TBB)表现更好。

3. 内存管理:减少“跑腿”次数

在超级计算机里,从一个核心跑到另一个核心去拿数据(跨节点访问),就像从北京跑到上海取快递,非常慢且贵。

  • 策略:作者让每个“区域”(NUMA 节点)都有自己的小仓库回收站
  • 效果:管理员尽量在自己家门口干活,少跑远路。通过“预分配”和“循环利用”内存块,大大减少了因为找不到东西而导致的“页面错误”(Page Faults,相当于书柜被拆了重装)。

4. 总结与比喻

如果把超级计算机比作一个超大型物流中心

  1. 跳表智能分拣系统,用多层传送带让包裹快速到达目的地。
  2. 队列自动化流水线,用托盘批量运输,并且把空托盘循环利用,不用每次都去工厂买新的。
  3. 哈希表智能快递柜,通过“主柜 + 副柜”的扩容机制,避免因为一个柜子满了而让整个物流中心停摆。
  4. 内存管理区域化仓储,让每个区的工人尽量在本地取货,减少跨城运输。

最终结论
作者证明了,通过精心设计的“分层结构”和“本地化内存管理”,即使在拥有成百上千个核心的超级计算机上,这些数据结构也能像单人操作一样流畅,甚至更快。这对于处理大数据、云计算和人工智能任务至关重要。

简单来说,这篇论文就是教我们如何在人多手杂的超级计算机上,把“找东西、存东西、运东西”这三件事做得井井有条,互不干扰,效率翻倍。