Sha256: 13ea1dd5a91750fb585ecffc344794c5e343919aaa4b3da2f196726b5be631b2

Contents?: true

Size: 993 Bytes

Versions: 38

Compression:

Stored size: 993 Bytes

Contents

# frozen_string_literal: true

require 'fiber'

class Fiber
  attr_accessor :next
end

# This program shows how the performance of Fiber.transfer degrades as the fiber
# count increases

def run(num_fibers)
  count = 0

  GC.start
  GC.disable

  first = nil
  last = nil
  supervisor = Fiber.current
  num_fibers.times do
    fiber = Fiber.new do
      loop do
        count += 1
        if count == 1_000_000
          supervisor.transfer
        else
          Fiber.current.next.transfer
        end
      end
    end
    first ||= fiber
    last.next = fiber if last
    last = fiber
  end

  last.next = first
  
  t0 = Time.now
  puts "start transfer..."
  first.transfer
  elapsed = Time.now - t0

  rss = `ps -o rss= -p #{Process.pid}`.to_i

  puts "fibers: #{num_fibers} rss: #{rss} count: #{count} rate: #{count / elapsed}"
rescue Exception => e
  puts "Stopped at #{count} fibers"
  p e
end

puts "pid: #{Process.pid}"
run(100)
# run(1000)
# run(10000)
# run(100000)
# run(400000)

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
polyphony-0.71 examples/performance/fiber_transfer.rb
polyphony-0.70 examples/performance/fiber_transfer.rb
polyphony-0.69 examples/performance/fiber_transfer.rb
polyphony-0.68 examples/performance/fiber_transfer.rb
polyphony-0.67 examples/performance/fiber_transfer.rb
polyphony-0.66 examples/performance/fiber_transfer.rb
polyphony-0.65 examples/performance/fiber_transfer.rb
polyphony-0.64 examples/performance/fiber_transfer.rb
polyphony-0.63 examples/performance/fiber_transfer.rb
polyphony-0.62 examples/performance/fiber_transfer.rb
polyphony-0.61 examples/performance/fiber_transfer.rb
polyphony-0.60 examples/performance/fiber_transfer.rb
polyphony-0.59.1 examples/performance/fiber_transfer.rb
polyphony-0.59 examples/performance/fiber_transfer.rb
polyphony-0.58 examples/performance/fiber_transfer.rb
polyphony-0.57.0 examples/performance/fiber_transfer.rb
polyphony-0.56.0 examples/performance/fiber_transfer.rb
polyphony-0.55.0 examples/performance/fiber_transfer.rb
polyphony-0.54.0 examples/performance/fiber_transfer.rb
polyphony-0.53.2 examples/performance/fiber_transfer.rb