有一些计算密集型的任务需要并行算。ruby2 时代我常用的套路是:安装 gem parallel,它提供了多线程、多进程两种方法,而且语法也比较简单。一般来说,如果用多进程方法,基本上所有 cpu 核心都可以跑满。
但是现在 ruby3 有了 ractor。我在想,如果改用 ractor 做并行,会比 parallel 更快吗?
不清楚 parallel 和 ractor 的具体实现原理,故请各位大神、或者用过的同学指教。
多进程和多线程的区别。原来的因为全局锁,所以不能真正并行。
哪个快难说,不过 Ractor(等成熟以后)内存上应该会很占优,毕竟这是设计 Ractor 的初衷
require 'benchmark' def fib n if n < 2 1 else fib(n-2) + fib(n-1) end end # 直接执行 puts Benchmark.measure { 8.times do fib(40) end } # 进程 puts Benchmark.measure { 8.times do fork { fib(40) } end Process.wait } # 线程 puts Benchmark.measure { 8.times.map { Thread.new{fib(40)} }.each{|t| t.value} } # Ractor puts Benchmark.measure { 8.times.map { Ractor.new{ fib(40) } }.each{|r| r.take} }
答案是 Ractor 和多进程差不多快