I/O model where read_nonblock/write_nonblock return immediately; when not ready they raise IO::WaitReadable/WaitWritable (EAGAIN/EWOULDBLOCK). Readiness is tested separately via IO.select (or epoll/kqueue), enabling a single event loop to serve many sockets.