探索 Ruby Ractors

主要观点:

  • Ruby 3.0 带来了 Ractors,承诺可在同一 Ruby 进程中实现真正的并发,但其在实际应用中并非适用于所有场景,如多数 Ruby 应用并非 CPU 密集型。
  • 通过基准测试对比 Ractors 与基线(串行和线程)在不同场景下的性能,如计算斐波那契数列和 Tarai 函数,发现早期在 M1 Macbook Pro 上结果不佳,后经调试和重新安装 Ruby 3.4.2 得到改善,在 M1 上 Ractors 比串行快 3.98 倍。
  • 在 Docker 环境中,Ractors 表现更差且效率更低,作者计划后续深入研究。
  • YJIT 是“Yet Another Ruby JIT”,能将 Ruby 代码即时编译为更高效的机器码,使 Ruby 代码执行更快,在 Ractors 基础上能带来 10 - 13 倍的加速,且已在生产环境中可用,作者的基准测试中 YJIT 使斐波那契数列计算的串行和 Ractors 执行时间大幅缩短。

关键信息:

  • Ractors 可实现真正的并发并行,但多数 Ruby 应用非 CPU 密集型,其优势不明显。
  • 基准测试代码可在jpterry/ruby-ractor-benchmarks获取。
  • 早期在 M1 Macbook Pro 上 Ractors 性能不佳,重新安装 Ruby 3.4.2 后结果改善。
  • 在 Docker 环境中 Ractors 更慢且效率低,作者计划深入研究。
  • YJIT 能显著提升 Ruby 代码执行速度,已在生产环境可用,Shopify/yjit-bench有更全面的基准测试。

重要细节:

  • 测试用 Ruby 版本为 3.4.2,在 M1 macOS、Docker 中的 M1 和 AMD 环境下进行。
  • 基准测试代码包括计算斐波那契数列和 Tarai 函数的不同实现及串行、线程和 Ractors 三种方式的对比。
  • 文中多次提到参考 Byroot 和 AppSignal 的相关博客文章,以及作者自己的ruby-ractors-benchmarks仓库
  • 对 YJIT 的介绍,包括其能将 Ruby 代码即时编译为更高效机器码,以及在不同环境下对 Ractors 性能的影响等。
阅读 5
0 条评论