Простое объяснение «схемы реактора» с ее приложениями [закрыто]


88

Схема реактора объяснена в Википедии , и это слишком абстрактно. Можете ли вы описать эту закономерность более конкретно? В идеале с фрагментами кода или высокоуровневыми диаграммами классов, описывающими некоторые применения паттерна реактора.


3
Нашел, что этот вопрос является отличным ответом - stackoverflow.com/questions/9138294/…
Райан Гиббонс

Ответы:


37

Вы можете проверить исходный документ с его описанием http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf

Шаблон проектирования Reactor обрабатывает запросы на обслуживание, которые одновременно доставляются приложению одним или несколькими клиентами. Каждая служба в приложении может состоять из нескольких методов и представлена ​​отдельным обработчиком событий, который отвечает за отправку запросов, связанных с конкретной службой. Отправка обработчиков событий выполняется диспетчером инициирования, который управляет зарегистрированными обработчиками событий. Демультиплексирование сервисных запросов выполняется демультиплексором синхронных событий.


Как вы заметите при чтении статьи, Дуглас Шмидт и его коллеги реализовали высокоэффективную модульную структуру C ++ под названием Adaptive Communications Environment, в которой шаблон Reactor играет центральную роль. Сама структура использует множество шаблонов проектирования, и ее стоит изучить только ради этого. Если вы ищете переносимый фреймворк для создания высокомасштабируемых бэкендов C ++, то стоит взглянуть на ACE.
user2015735 03

1
@reese Link сегодня не работает, чувак :(
Аллан Чуа

1
@AllanChua, кажется, я нашел его - dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
sergeyrar

3
OP попросил "простое, конкретное" объяснение, а вы предложили что-то еще более абстрактное, чем Википедия ...
Же

22

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



3
Основная идея заключается в выполнении синхронного демультиплексирования событий. Обработчики событий вызываются только в том случае, если они могут выполняться неблокирующим образом, например, весь пакет данных доступен в сетевом сокете, ожидая, пока обработчик событий обработает данные. Это позволяет последовательно выполнять обработчик событий неблокирующим образом
SebNag

2
«Шаблон Reactor отвечает за демультиплексирование и диспетчеризацию нескольких обработчиков событий, которые запускаются, когда есть возможность запустить операцию синхронно без блокировки». из статьи, указанной в принятом ответе
SebNag

Это совсем не так. В нереакторе потоков столько же, сколько в схеме реактора. Вместо цикла событий у вас может быть один «ведущий» поток, который не использует шаблон наблюдатель / слушатель событий. Такая же производительность.
Zombies
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.