Ruby、Ractors 与无锁数据结构

  1. 1. 简介 (Intro)
  2. 2. Ractors:是什么以及为什么 (Ractors, what and why)
  3. 3. Ruby 堆 (Ruby heap)
  4. 4. 计数器:错误的方式 (Counter, the wrong way)
  5. 5. 原子操作 (Atomics)
  6. 6. 计数器:正确的方式 (Counter, the right way)
  7. 7. 容器、Ractors 和 GC (Containers, Ractors, and GC)
  8. 8. 并发 HashMap (Concurrent HashMap)
  9. 9. 并发对象池 (Concurrent ObjectPool)
  10. 10. (简易) 并发队列 ((Naive) Concurrent Queue)
  11. 11. 并行测试框架 (Parallel Test Framework)
  12. 12. 更好的队列 (A Better Queue)
    1. 12.1. 无锁 MPMC 队列 (Lock Free MPMC Queue)
    2. 12.2. 添加阻塞接口 (Adding Blocking Interface)
    3. 12.3. 标记 (Marking)
    4. 12.4. 编写 Web 服务器 (Writing a Web Server)
  13. 13. 结论 (Conclusion)

简介

这个故事是关于 Ruby 上下文中的并发数据结构。 这里的目标是演示如何使用全局可变状态实现真正的并行性(在编写本文时,内置的 Ruby 原语不支持)。

熟悉 Ruby、Rust、C (以及一些其他工具) 会更好,但希望不是强制性的。

包含代码示例的仓库可以在 GitHub 上找到,要运行它,你需要一个相对较新的 Ruby 版本(如果可以本地编译,master 分支可能是最佳选择)、Rust 和 C 编译器。