Project

General

Profile

Bug #19288 » json_parse_string.rb

luke-gru (Luke Gruber), 08/28/2025 07:05 PM

 
require_relative "../../harness/loader"

use_ractor_gemfile("json_parse")
puts "JSON #{JSON::VERSION}"

ELEMENTS = 300_000
list = ELEMENTS.times.map do |i|
{
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
"string #{i}" => "value #{i}",
}.to_json
end
Ractor.make_shareable(list)

# Work is divided between ractors
run_benchmark(5, ractor_args: [list]) do |num_rs, list|
# num_rs: 1,list: 100_000
# num_rs: 2 list: 50_000
# num_rs: 4 list: 25_000
if num_rs.zero?
num = list.size
else
num = list.size / num_rs
end
list.each_with_index do |json, idx|
break if idx >= num
JSON.parse(json)
end
end
(2-2/2)