@@ -222,19 +222,19 @@ puts "Atomic Ruby Atomic Bank Account: #{results[2].real.round(6)} seconds"
222222```
223223> bundle exec rake compile && bundle exec ruby examples/atom_benchmark.rb
224224
225- ruby version: ruby 3.4.7 (2025-10-08 revision 7a5688e2a2 ) +YJIT +PRISM [arm64-darwin25]
225+ ruby version: ruby 3.5.0dev (2025-10-31T18:08:15Z master 980e18496e ) +YJIT +PRISM [arm64-darwin25]
226226concurrent-ruby version: 1.3.5
227- atomic-ruby version: 0.7 .0
227+ atomic-ruby version: 0.8 .0
228228
229229Balances:
230230Synchronized Bank Account Balance: 975
231231Concurrent Ruby Atomic Bank Account Balance: 975
232232Atomic Ruby Atomic Bank Account Balance: 975
233233
234234Benchmark Results:
235- Synchronized Bank Account: 5.102692 seconds
236- Concurrent Ruby Atomic Bank Account: 5.100103 seconds
237- Atomic Ruby Atomic Bank Account: 5.096461 seconds
235+ Synchronized Bank Account: 5.105459 seconds
236+ Concurrent Ruby Atomic Bank Account: 5.101044 seconds
237+ Atomic Ruby Atomic Bank Account: 5.091892 seconds
238238```
239239
240240</details >
@@ -313,29 +313,29 @@ end
313313```
314314> bundle exec rake compile && bundle exec ruby examples/atomic_boolean_benchmark.rb
315315
316- ruby version: ruby 3.4.7 (2025-10-08 revision 7a5688e2a2 ) +YJIT +PRISM [arm64-darwin25]
316+ ruby version: ruby 3.5.0dev (2025-10-31T18:08:15Z master 980e18496e ) +YJIT +PRISM [arm64-darwin25]
317317concurrent-ruby version: 1.3.5
318- atomic-ruby version: 0.7 .0
318+ atomic-ruby version: 0.8 .0
319319
320320Warming up --------------------------------------
321321Synchronized Boolean Toggle
322- 93 .000 i/100ms
322+ 154 .000 i/100ms
323323Concurrent Ruby Atomic Boolean Toggle
324- 79 .000 i/100ms
324+ 127 .000 i/100ms
325325Atomic Ruby Atomic Boolean Toggle
326- 87 .000 i/100ms
326+ 139 .000 i/100ms
327327Calculating -------------------------------------
328328Synchronized Boolean Toggle
329- 889.613 (± 3.0 %) i/s (1.12 ms /i) - 4.464k in 5.022732s
329+ 1.458k (± 7.3 %) i/s (685.85 μs /i) - 7.392k in 5.102733s
330330Concurrent Ruby Atomic Boolean Toggle
331- 803.418 (± 2.5 %) i/s (1.24 ms /i) - 4.029k in 5.017952s
331+ 1.129k (± 9.7 %) i/s (886.10 μs /i) - 5.588k in 5.001783s
332332Atomic Ruby Atomic Boolean Toggle
333- 1.037k (± 3.1 %) i/s (964.07 μs/i) - 5.220k in 5.037558s
333+ 1.476k (± 6.0 %) i/s (677.44 μs/i) - 7.367k in 5.017482s
334334
335335Comparison:
336- Atomic Ruby Atomic Boolean Toggle: 1037.3 i/s
337- Synchronized Boolean Toggle: 889.6 i/s - 1.17x slower
338- Concurrent Ruby Atomic Boolean Toggle: 803.4 i/s - 1.29x slower
336+ Atomic Ruby Atomic Boolean Toggle: 1476.1 i/s
337+ Synchronized Boolean Toggle: 1458.1 i/s - same-ish: difference falls within error
338+ Concurrent Ruby Atomic Boolean Toggle: 1128.5 i/s - 1.31x slower
339339```
340340
341341</details >
@@ -353,6 +353,14 @@ require "benchmark"
353353require " concurrent-ruby"
354354require_relative " ../lib/atomic-ruby"
355355
356+ def shareable_proc (& block )
357+ if AtomicRuby ::RACTOR_SAFE
358+ Ractor .shareable_proc(& block)
359+ else
360+ block
361+ end
362+ end
363+
356364results = []
357365
3583662 .times do |idx |
@@ -363,11 +371,11 @@ results = []
363371 end
364372
365373 100 .times do
366- pool << proc { sleep (0.2 ) }
374+ pool << shareable_proc { sleep (0.2 ) }
367375 end
368376
369377 100 .times do
370- pool << proc { 1_000_000 .times.map(& :itself ).sum }
378+ pool << shareable_proc { 1_000_000 .times.map(& :itself ).sum }
371379 end
372380
373381 pool.shutdown
@@ -391,13 +399,13 @@ puts "Atomic Ruby Atomic Thread Pool: #{results[1].real.round(6)} seconds"
391399```
392400> bundle exec rake compile && bundle exec ruby examples/atomic_thread_pool_benchmark.rb
393401
394- ruby version: ruby 3.4.7 (2025-10-08 revision 7a5688e2a2 ) +YJIT +PRISM [arm64-darwin25]
402+ ruby version: ruby 3.5.0dev (2025-10-31T18:08:15Z master 980e18496e ) +YJIT +PRISM [arm64-darwin25]
395403concurrent-ruby version: 1.3.5
396- atomic-ruby version: 0.7 .0
404+ atomic-ruby version: 0.8 .0
397405
398406Benchmark Results:
399- Concurrent Ruby Thread Pool: 5.30284 seconds
400- Atomic Ruby Atomic Thread Pool: 5.019147 seconds
407+ Concurrent Ruby Thread Pool: 5.13772 seconds
408+ Atomic Ruby Atomic Thread Pool: 4.893086 seconds
401409```
402410
403411</details >
0 commit comments