Событийная машина позволяет организовать асинхронную передачу данных для нескольких соединений в рамках одного процесса.
В основе любой событийной машины лежит цикл событий. Машина открывает несколько потоков данных для приема сигналов, и по циклу отслеживает поступление вызовов. Как только фиксируется событие ввода/вывода, машина передает управление участку кода, отвечающему за обработку произошедшего события. Обычно машина работает в режиме невытесняющей многозадачности: т.е. в один момент времени ведется обработка только одного события. Обработка следующего события не начнется до тех пор, пока предыдущий обработчик не завершит свою работу. Таким образом, «зависание» обработки одного события приводит к блокировке всей системы.