digital-garden/dev/architecture/Event Loop.md

6.7 KiB
Raw Blame History

aliases tags date zero-link parents linked
событийного цикла
событийный цикл
single-threaded execution loop
maturity/🌱
2023-10-26
../../meta/zero/00 Архитектура ПО
Реактивное программирование

Event loop (цикл событий) — это фундаментальная концепция в асинхронном программировании, которая позволяет системе обрабатывать большое количество задач без создания множества ../fundamental/Поток процесса ОС.

По сути, Event Loop - это реализация шаблона Reactor. Он используется в языках и фреймворках, которые должны обрабатывать большое количество операций ../../../../_inbox/Ввод-вывод (I/O) эффективно, минимизируя затраты на создание и управление потоками. Цикл событий стал особенно популярным в таких технологиях, как JavaScript (Node.js), Python (asyncio), и современных реактивных фреймворках на Java (Vert.x, ../../meta/zero/00 Quarkus).

Цикл событий представляет собой непрерывную петлю, которая ожидает появления событий, таких как запросы клиентов, завершение операций I/O, сигналы от системных ресурсов и другие задачи. Когда событие происходит, цикл событий вызывает соответствующий обработчик, который выполняется без блокировки основной петли (../../../../_inbox/Не блокирующийся ввод-вывод).

Основные шаги работы event loop:

  1. Ожидание событий. Цикл событий ожидает появления новых задач (например, клиентских запросов, ответов от базы данных, сообщений от других сервисов).
  2. Помещение задачи в очередь. Когда событие происходит (например, пришел запрос от клиента), оно добавляется в очередь задач, ожидающих обработки.
  3. Выполнение задачи. Цикл событий начинает обработку задачи, извлекая её из очереди и вызывая соответствующий обработчик.
  4. Завершение задачи. Когда задача завершена (например, отправлен ответ клиенту), цикл переходит к следующему событию в очереди.

Преимущества

  • Эффективное использование ресурсов. Event loop позволяет системе обрабатывать большое количество запросов без необходимости создания множества потоков. Это снижает накладные расходы на память и процессорное время.
  • Масштабируемость. Благодаря асинхронной модели, event loop может обрабатывать сотни тысяч запросов одновременно, что делает его идеальным решением для ../../meta/zero/00 HighLoad.
  • Неблокирующее выполнение. В отличие от традиционных моделей, где операции ввода-вывода блокируют поток (Блокирующий вызов), в модели event loop такие операции выполняются асинхронно, освобождая поток для выполнения других задач.
  • Минимум ../fundamental/Переключение контекста. Цикл событий снижает количество переключений между потоками, что снижает накладные расходы на переключение контекста и увеличивает производительность.

Недостатки

  • Ограниченная поддержка CPU-ориентированных задач. Модель event loop идеально подходит для операций ввода-вывода, но для задач, требующих интенсивных вычислений, такая модель не так эффективна. В таком случае ==поток может быть занят длительное время, блокируя выполнение других задач.==
  • Сложность управления. Асинхронные операции требуют управления состояниями и корректной обработки событий, что усложняет разработку и отладку. ==Ошибки в одном обработчике могут затронуть другие запросы, обрабатываемые тем же циклом событий.==
  • “Заблокированный” цикл. Если цикл событий заблокирован долгой синхронной операцией, это может затормозить выполнение всех задач, так как весь поток будет занят одной задачей.

Мета информация

Область:: ../../meta/zero/00 Архитектура ПО Родитель:: Реактивное программирование Источник:: Автор:: Создана::

Дополнительные материалы

Дочерние заметки