Bug #20112
openRactors not working properly in ruby 3.3.0
Description
I recently installed Ruby 3.3.0, and noticed that some of my scripts that use Ractors started to struggle with performance. After doing some benchmarks, I noticed that, while Ractors seem to be working well on Ruby 3.2.2, they're not working properly on 3.3.0.
I'm using Ubuntu 22.04.3 LTS
Here is the benchmark code:
# frozen_string_literal: true
require 'benchmark'
Ractor.new { :warmup } if defined?(Ractor)
Benchmark.bmbm do |x|
x.report("Thread: ") do
threads = []
8.times do |i|
threads << Thread.new do
20000000.times do |j|
((i * 20000000) + j)**2
end
end
end
threads.each(&:join)
end
x.report("Ractor: ") do
ractors = []
0..8.times do |i|
ractors << Ractor.new(i) do |k|
20000000.times do |j|
((k * 20000000) + j)**2
end
end
end
ractors.map(&:take)
end
end
Here is the results for Ruby 3.2.2:
Rehearsal --------------------------------------------
Thread: 7.666909 0.001091 7.668000 ( 7.675266)
Ractor: 19.318528 0.012017 19.330545 ( 2.505888)
---------------------------------- total: 26.998545sec
user system total real
Thread: 7.918141 0.004011 7.922152 ( 7.928772)
Ractor: 19.366414 0.003954 19.370368 ( 2.517993)
Here is the results for Ruby 3.3.0:
Rehearsal --------------------------------------------
Thread: 8.634152 0.010895 8.645047 ( 8.645104)
Ractor: 100.172179 0.035985 100.208164 ( 15.213245)
--------------------------------- total: 108.853211sec
user system total real
Thread: 9.451236 0.004002 9.455238 ( 9.460132)
Ractor: 118.463294 0.119942 118.583236 ( 18.462157)