summaryrefslogtreecommitdiff
path: root/test/ruby/test_integer.rb
diff options
context:
space:
mode:
authorJean Boussier <jean.boussier@gmail.com>2025-12-31 13:54:00 +0100
committerJean Boussier <jean.boussier@gmail.com>2026-01-01 10:20:08 +0100
commit8ce61f90ba4aea3d52e92e258c3803b8b885726e (patch)
tree6ffd3ad6a3570bf11edba5b25259422b28e9850d /test/ruby/test_integer.rb
parent41292562141118147c6a4eff5552097b0ecc79f0 (diff)
Thread::Queue use a ring buffer
Thread::Queue spends a significant amount of time in array functions, checking for invariants we know aren't a problem, and whether the backing array need to reordered. By using a ring buffer we can remove a lot of overhead (~23% faster). ``` $ hyperfine './miniruby --yjit /tmp/q.rb' './miniruby-qrb --yjit /tmp/q.rb' Benchmark 1: ./miniruby --yjit /tmp/q.rb Time (mean ± σ): 1.050 s ± 0.191 s [User: 0.988 s, System: 0.004 s] Range (min … max): 0.984 s … 1.595 s 10 runs Benchmark 2: ./miniruby-qrb --yjit /tmp/q.rb Time (mean ± σ): 844.2 ms ± 3.1 ms [User: 840.4 ms, System: 2.8 ms] Range (min … max): 838.6 ms … 848.9 ms 10 runs Summary ./miniruby-qrb --yjit /tmp/q.rb ran 1.24 ± 0.23 times faster than ./miniruby --yjit /tmp/q.rb ``` ``` q = Queue.new([1, 2, 3, 4, 5, 6, 7, 8]) i = 2_000_000 while i > 0 i -= 1 q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) q.push(q.pop) end ```
Diffstat (limited to 'test/ruby/test_integer.rb')
0 files changed, 0 insertions, 0 deletions