Sha256: 1d229123fd829b125c5b844eebec3cce6031a2c9b6d1ecaa06f3c1e8da711343

Contents?: true

Size: 728 Bytes

Versions: 6

Compression:

Stored size: 728 Bytes

Contents

# frozen_string_literal: true

require 'fiber'

class Fiber
  attr_accessor :next
end

# This program shows how the performance 

def run(num_fibers)
  count = 0

  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
  first.transfer
  elapsed = Time.now - t0

  puts "fibers: #{num_fibers} count: #{count} rate: #{count / elapsed}"
  GC.start
end

run(100)
run(1000)
run(10000)

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
polyphony-0.45.0 examples/performance/fiber_transfer.rb
polyphony-0.44.0 examples/performance/fiber_transfer.rb
polyphony-0.43.11 examples/performance/fiber_transfer.rb
polyphony-0.43.10 examples/performance/fiber_transfer.rb
polyphony-0.43.9 examples/performance/fiber_transfer.rb
polyphony-0.43.8 examples/performance/fiber_transfer.rb