diff options
author | samuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-20 10:13:51 +0000 |
---|---|---|
committer | samuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-20 10:13:51 +0000 |
commit | 9a324cf9cc553f77ddbac5de815768cb1655cfe9 (patch) | |
tree | 1de41be89277783a09359947b476ae9160724092 /benchmark/vm2_fiber_chain.rb | |
parent | 3f0ae69186cc8effab317bae2da0472231bce67d (diff) |
Better benchmark name.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'benchmark/vm2_fiber_chain.rb')
-rwxr-xr-x | benchmark/vm2_fiber_chain.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/benchmark/vm2_fiber_chain.rb b/benchmark/vm2_fiber_chain.rb new file mode 100755 index 0000000000..7d5b561229 --- /dev/null +++ b/benchmark/vm2_fiber_chain.rb @@ -0,0 +1,50 @@ +#!/usr/bin/env ruby + +require 'benchmark' + +def make_link(previous) + Fiber.new do + while message = previous.resume + Fiber.yield(message) + end + end +end + +def make_chain(length, &block) + chain = Fiber.new(&block) + + (length - 1).times do + chain = make_link(chain) + end + + return chain +end + +def run_benchmark(length, repeats, message = :hello) + chain = nil + + time = Benchmark.realtime do + chain = make_chain(length) do + while true + Fiber.yield(message) + end + end + end + + puts "Creating #{fibers} fibers took #{time}..." + + time = Benchmark.realtime do + repeats.times do + abort "invalid result" unless chain.resume == message + end + end + + puts "Passing #{repeats} messages took #{time}..." +end + +n = (ARGV[0] || 1000).to_i +m = (ARGV[1] || 1000).to_i + +5.times do + run_benchmark(n, m) +end |