class Puma::Reactor

def initialize(backend, &block)

its timeout elapses, or when the Reactor shuts down.
The provided block will be invoked when an IO has data available to read,
Create a new Reactor to monitor IO objects added by #add.
def initialize(backend, &block)
  require 'nio'
  valid_backends = [:auto, *::NIO::Selector.backends]
  unless valid_backends.include?(backend)
    raise ArgumentError.new("unsupported IO selector backend: #{backend} (available backends: #{valid_backends.join(', ')})")
  end
  @selector = ::NIO::Selector.new(NIO::Selector.backends.delete(backend))
  @input = Queue.new
  @timeouts = []
  @block = block
end