Sha256: 58e2525e6e362b5a2a3825a0c1388da7800c307ac3535d54e5a9ea794aa2861b

Contents?: true

Size: 889 Bytes

Versions: 2

Compression:

Stored size: 889 Bytes

Contents

# frozen_string_literal: true

require_relative '../lib/uringmachine'

@machine = UM.new

@counter = 0
@fiber_count = 0

def start_fiber
  @fiber_count += 1
  @machine.spin do
    max_count = @counter + rand(1000)
    puts "Start #{Fiber.current} #{max_count - @counter}"
    loop do
      @machine.sleep 0.001
      @counter += 1
      break if @counter >= max_count
    end
    puts "Stop #{Fiber.current}"
  ensure
    @fiber_count -= 1
  end
end

t0 = Time.now
MAX_FIBERS = 20
MAX_TIME = 10
loop do
  @machine.sleep 0.1
  puts "pending: #{@machine.pending_count}"
  break if (Time.now - t0) > MAX_TIME
  start_fiber while @fiber_count < MAX_FIBERS
end
t1 = Time.now  
elapsed = t1 - t0
rate = @counter / elapsed
puts "Did #{@counter} ops in #{elapsed} seconds (#{rate} ops/s)"

puts "Waiting for fibers... (#{@fiber_count})"
while @fiber_count > 0
  @machine.sleep 0.1
end
puts "Done"

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
uringmachine-0.5.1 examples/snooze.rb
uringmachine-0.5 examples/snooze.rb