summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorsamuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-11-20 09:59:18 +0000
committersamuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-11-20 09:59:18 +0000
commit748c497a6d8f3f4136a6bd4c1931c73f041aba0e (patch)
treef5b318d63f22014837e166ce3f3c9c88aae66e5b /benchmark
parent990ddcfccf7b234960bf953ca8cf453d4b397d11 (diff)
Rewrite fiber benchmark
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65836 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'benchmark')
-rwxr-xr-xbenchmark/bm_vm2_fiber_chain.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/benchmark/bm_vm2_fiber_chain.rb b/benchmark/bm_vm2_fiber_chain.rb
new file mode 100755
index 0000000000..3227be0caa
--- /dev/null
+++ b/benchmark/bm_vm2_fiber_chain.rb
@@ -0,0 +1,44 @@
+#!/usr/bin/env ruby
+
+require 'benchmark'
+
+def make_link(previous)
+ Fiber.new do
+ while message = previous.resume
+ Fiber.yield(message)
+ end
+ end
+end
+
+def run_benchmark(fibers, repeats, message = :hello)
+ chain = nil
+
+ time = Benchmark.realtime do
+ chain = Fiber.new do
+ while true
+ Fiber.yield(message)
+ end
+ end
+
+ (fibers - 1).times do
+ chain = make_link(chain)
+ 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