快速可扩展的无锁 k-FIFO 队列技术解析
在并行共享内存硬件的应用场景中,快速并发池和队列的设计与实现一直是研究的热点。本文将介绍两种算法,它们能够实现有界大小(BS)和无界大小(US)的无锁 k - FIFO 队列,并具备可线性化的空(和满)检查功能。
1. 引言
在并行共享内存硬件上,我们期望设计和实现的并发池和队列的访问性能能随可用处理单元数量的增加而提升。为此,我们引入了两种算法,分别实现有界大小(BS)和无界大小(US)的无锁 k - FIFO 队列,且具备可线性化的空(和满)检查功能。
BS 算法维护一个有界大小的元素数组,该数组动态划分为大小为 k 的段,称为 k - 段;US 算法则维护一个无界的 k - 段列表。这样,最多可以并行执行 k 个入队和 k 个出队操作。当 k = 1 时,US 算法简化为一种类似于无锁 Michael - Scott FIFO 队列(MS)的无锁 FIFO 队列算法,但没有哨兵节点。
k - 段的概念最早出现在所谓的段队列(SQ)中。US 算法使用 k - 段,但通过延迟从 k - 段槽中移除元素,减少了开销和争用,从而在性能和可扩展性上优于 SQ。此外,这两种 k - FIFO 队列算法都实现了可线性化的空检查,而 SQ 则没有。
实验表明,存在最优且稳定的 k 值,能带来最佳的访问性能和可扩展性。我们的算法在几乎所有的线程和争用场景中,都优于我们所考虑的所有现有并发池和队列算法。最后,我们还展示了一个原型控制器,它能在运行时自动识别最优的 k 值,其性能优于任何静态配置的 k 值。
2. k - FIFO 队列的顺序规范
k - FIFO 队
超级会员免费看
订阅专栏 解锁全文
8165

被折叠的 条评论
为什么被折叠?



