Что такое EventLoop
Что проверяют
Понимаете ли вы неблокирующую модель обработки соединений и её цену. Вопрос для джависта с подвохом: в самой Java цикла событий нет, он приходит с сетевыми фреймворками, и ожидается, что вы это скажете, а не перескажете устройство браузерного движка.
Как отвечать
Event loop это поток, крутящий бесконечный цикл поверх неблокирующего ввода-вывода: селектор ждёт готовности каналов, а затем цикл вызывает обработчики для тех, где появились данные. Один поток обслуживает тысячи соединений, потому что не простаивает на ожидании сокета.
В сетевых библиотеках поверх этого строится группа циклов: обычно их по числу ядер, а каждое соединение навсегда закрепляется за одним циклом. Отсюда приятное свойство: обработчики одного соединения всегда выполняются в одном потоке, и синхронизация состояния соединения не нужна.
Главное правило одно: в этом потоке нельзя блокироваться. Запрос в базу через блокирующий драйвер, ожидание ответа сервиса, тяжёлый расчёт или спор за монитор останавливают все соединения, закреплённые за циклом, а не только текущее. Блокирующую работу выносят в отдельный пул и возвращают результат обратно.
Полезно отделить соседние понятия: композиция фьючерсов это не цикл событий, а планирование задач в пуле потоков, а виртуальные потоки решают ту же задачу с другой стороны, позволяя писать блокирующий код без потери пропускной способности.
Где спотыкаются
Называют event loop частью языка или JVM и не могут сказать, откуда он берётся в проекте и сколько потоков занимает.
Ставят блокирующий вызов в обработчик. Нагрузочный тест показывает рост задержек у всех клиентов сразу, и причину ищут в базе, хотя она в занятом цикле.
Считают реактивный стек универсальным ускорением. Он повышает число одновременных соединений на ту же память, но время одного запроса не сокращает, зато усложняет отладку и переносит контекст между потоками, из-за чего диагностические данные и сквозной идентификатор теряются по дороге.