Ruby, Ractors, and lock-free data structures
文章探讨了在 Ruby 中使用 Ractors 实现并发数据结构。核心内容包括:介绍 Ractors 的概念和作用,讨论 Ruby 堆,以及如何通过原子操作实现无锁计数器。文章还展示了并发 HashMap、对象池和队列的实现,并探讨了并行测试框架。最后,文章深入研究了无锁 MPMC 队列,并演示了如何构建一个 Web 服务器。代码示例可在 GitHub 上找到,需要较新版本的 Ruby、Rust 和 C 编译器。
Ruby、Ractors 与无锁数据结构
- 1. 简介 (Intro)
- 2. Ractors:是什么以及为什么 (Ractors, what and why)
- 3. Ruby 堆 (Ruby heap)
- 4. 计数器:错误的方式 (Counter, the wrong way)
- 5. 原子操作 (Atomics)
- 6. 计数器:正确的方式 (Counter, the right way)
- 7. 容器、Ractors 和 GC (Containers, Ractors, and GC)
- 8. 并发 HashMap (Concurrent HashMap)
- 9. 并发对象池 (Concurrent ObjectPool)
- 10. (简易) 并发队列 ((Naive) Concurrent Queue)
- 11. 并行测试框架 (Parallel Test Framework)
- 12. 更好的队列 (A Better Queue)
- 13. 结论 (Conclusion)
简介
这个故事是关于 Ruby 上下文中的并发数据结构。 这里的目标是演示如何使用全局可变状态实现真正的并行性(在编写本文时,内置的 Ruby 原语不支持)。
熟悉 Ruby、Rust、C (以及一些其他工具) 会更好,但希望不是强制性的。
包含代码示例的仓库可以在 GitHub 上找到,要运行它,你需要一个相对较新的 Ruby 版本(如果可以本地编译,master 分支可能是最佳选择)、Rust 和 C 编译器。