主要观点:
- 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 性能的影响等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。