Project

General

Profile

Actions

Bug #20112

closed

Ractors not working properly in ruby 3.3.0

Added by ariasdiniz (Aria Diniz) over 1 year ago. Updated 13 days ago.

Status:
Closed
Assignee:
Target version:
-
[ruby-core:115995]

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)

Updated by hsbt (Hiroshi SHIBATA) over 1 year ago

  • Status changed from Open to Assigned
  • Assignee set to ko1 (Koichi Sasada)
Actions #2

Updated by jhawthorn (John Hawthorn) 24 days ago

  • Assignee changed from ko1 (Koichi Sasada) to ractor
Actions #3

Updated by byroot (Jean Boussier) 13 days ago

  • Description updated (diff)

Updated by etienne (Étienne Barrié) 13 days ago

I can't repro on my mac so it seems Linux only.

It has been corrected on master since both 3.5.0-preview1 and master are now faster with ractors than with threads.

ruby 3.5.0dev (2025-05-19T04:27:50Z master 40c957ba21) +PRISM [aarch64-linux]
-:21: warning: possibly useless use of .. in void context
Rehearsal --------------------------------------------
-:5: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
Thread:    5.074042   0.001007   5.075049 (  5.076653)
Ractor:    5.375332   0.000005   5.375337 (  1.548004)
---------------------------------- total: 10.450386sec

               user     system      total        real
Thread:    5.098492   0.001000   5.099492 (  5.098067)
Ractor:    5.254631   0.001000   5.255631 (  1.545433)
Actions #5

Updated by byroot (Jean Boussier) 13 days ago

  • Status changed from Assigned to Closed
Actions

Also available in: Atom PDF

Like1
Like0Like0Like0Like0Like0