class Opal::BuilderScheduler::Prefork::ForkSet

def get_events(queue_length)

def get_events(queue_length)
  # Wait for anything to happen:
  # - Either any of our workers return some data
  # - Or any workers become ready to receive data
  #   - But only if we have enough work for them
  ios = IO.select(
    map(&:read_io),
    sample(queue_length).map(&:write_io),
    []
  )
  return [[], []] unless ios
  events = ios[0].map do |io|
    io = from_io(io, :read_io)
    [io, *io.recv]
  end
  idles = ios[1].map do |io|
    from_io(io, :write_io)
  end
  # Progressively create forks, because we may not need all
  # the workers at the time. The number 6 was picked due to
  # some trial and error on a Ryzen machine.
  #
  # Do note that prefork may happen more than once.
  create_fork if length < @count && rand(6) == 1
  [events, idles]
end