Как понимать event-driven, blocking и non-blocking I/O