From: "luke-gru (Luke Gruber) via ruby-core" Date: 2025-08-28T19:07:09+00:00 Subject: [ruby-core:123111] [Ruby Bug#19288] Ractor JSON parsing significantly slower than linear parsing Issue #19288 has been updated by luke-gru (Luke Gruber). File json_parse_float.rb added File json_parse_string.rb added The situation with ractors has improved a lot since the last update to this thread. I encourage you to try out ruby master if you can. ``` Running benchmark "json_parse_float" (1/2) + /Users/luke/.rubies/master-release/bin/ruby -I harness-ractor /Users/luke/workspace/yjit-bench/benchmarks/ractor/json_parse_float.rb JSON 2.13.2 r: itr: time 0 #1: 488ms 0 #2: 477ms 0 #3: 458ms 0 #4: 448ms 0 #5: 445ms 1 #1: 384ms 1 #2: 411ms 1 #3: 395ms 1 #4: 422ms 1 #5: 390ms 2 #1: 262ms 2 #2: 260ms 2 #3: 244ms 2 #4: 248ms 2 #5: 241ms 4 #1: 168ms 4 #2: 179ms 4 #3: 145ms 4 #4: 175ms 4 #5: 145ms 6 #1: 166ms 6 #2: 181ms 6 #3: 151ms 6 #4: 133ms 6 #5: 139ms 8 #1: 116ms 8 #2: 140ms 8 #3: 136ms 8 #4: 117ms 8 #5: 148ms 12 #1: 130ms 12 #2: 123ms 12 #3: 117ms 12 #4: 136ms 12 #5: 129ms 16 #1: 100ms 16 #2: 111ms 16 #3: 96ms 16 #4: 122ms 16 #5: 90ms 32 #1: 100ms 32 #2: 76ms 32 #3: 100ms 32 #4: 76ms 32 #5: 91ms Running benchmark "json_parse_string" (2/2) + /Users/luke/.rubies/master-release/bin/ruby -I harness-ractor /Users/luke/workspace/yjit-bench/benchmarks/ractor/json_parse_string.rb JSON 2.13.2 r: itr: time 0 #1: 116ms 0 #2: 130ms 0 #3: 121ms 0 #4: 126ms 0 #5: 128ms 1 #1: 91ms 1 #2: 117ms 1 #3: 102ms 1 #4: 101ms 1 #5: 97ms 2 #1: 70ms 2 #2: 83ms 2 #3: 64ms 2 #4: 65ms 2 #5: 80ms 4 #1: 58ms 4 #2: 57ms 4 #3: 58ms 4 #4: 60ms 4 #5: 60ms 6 #1: 55ms 6 #2: 77ms 6 #3: 75ms 6 #4: 57ms 6 #5: 58ms 8 #1: 64ms 8 #2: 61ms 8 #3: 58ms 8 #4: 56ms 8 #5: 61ms 12 #1: 57ms 12 #2: 54ms 12 #3: 55ms 12 #4: 55ms 12 #5: 57ms 16 #1: 49ms 16 #2: 59ms 16 #3: 74ms 16 #4: 53ms 16 #5: 55ms 32 #1: 52ms 32 #2: 53ms 32 #3: 44ms 32 #4: 51ms 32 #5: 51ms ``` ---------------------------------------- Bug #19288: Ractor JSON parsing significantly slower than linear parsing https://bugs.ruby-lang.org/issues/19288#change-114428 * Author: maciej.mensfeld (Maciej Mensfeld) * Status: Closed * ruby -v: ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-linux] * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- a simple benchmark: ```ruby require 'json' require 'benchmark' CONCURRENT = 5 RACTORS = true ELEMENTS = 100_000 data = CONCURRENT.times.map do ELEMENTS.times.map do { rand => rand, rand => rand, rand => rand, rand => rand }.to_json end end ractors = CONCURRENT.times.map do Ractor.new do Ractor.receive.each { JSON.parse(_1) } end end result = Benchmark.measure do if RACTORS CONCURRENT.times do |i| ractors[i].send(data[i], move: false) end ractors.each(&:take) else # Linear without any threads data.each do |piece| piece.each { JSON.parse(_1) } end end end puts result ``` Gives following results on my 8 core machine: ```shell # without ractors: 2.731748 0.003993 2.735741 ( 2.736349) # with ractors 12.580452 5.089802 17.670254 ( 5.209755) ``` I would expect Ractors not to be two times slower on the CPU intense work. ---Files-------------------------------- json_parse_float.rb (727 Bytes) json_parse_string.rb (1.22 KB) -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/