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

21 lines
2.0 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
aliases: []
tags:
- зрелость/🌱
date: "[[2023-10-26]]"
zero-link:
2024-09-01 20:44:54 +03:00
- "[[../../garden/ru/meta/zero/00 Разработка]]"
2024-06-13 21:01:37 +03:00
parents:
- "[[Реактивная разработка]]"
2024-09-01 20:44:54 +03:00
linked:
2024-06-13 21:01:37 +03:00
---
По сути, Event Loop - это реализация [шаблона Reactor](http://design-pattern.ru/patterns/reactor.html). Является неблокирующим потоком ввода-вывода, который работает непрерывно. Его основная задача — проверка новых событий. И как только событие пришло перенаправлять его тому, кто в данный момент может его обработать. Иногда их может быть несколько для увеличения производительности. 
![](Pasted%20image%2020231026115508.png)
Выше приведён абстрактный дизайн цикла событий, который представляет идеи реактивного асинхронного программирования:
- Цикл событий выполняется непрерывно в одном потоке, хотя у нас может быть столько циклов событий, сколько доступно ядер.
- Цикл событий последовательно обрабатывает события из очереди событий и возвращается сразу после регистрации обратного вызова в платформе.
- Платформа может инициировать завершение операции, такой как вызов базы данных или вызов внешней службы.
- Цикл событий может запускать обратный вызов при уведомлении о завершении операции и отправлять результат обратно исходному вызывающему.