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

88

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

Eleco
источник
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).

Эндрю Пэйт
источник
1
Голосовать против,
3
Основная идея заключается в выполнении синхронного демультиплексирования событий. Обработчики событий вызываются только в том случае, если они могут выполняться неблокирующим образом, например, весь пакет данных доступен в сетевом сокете, ожидая, пока обработчик событий обработает данные. Это позволяет последовательно выполнять обработчик событий неблокирующим образом
SebNag
2
«Шаблон Reactor отвечает за демультиплексирование и диспетчеризацию нескольких обработчиков событий, которые запускаются, когда есть возможность запустить операцию синхронно без блокировки». из статьи, указанной в принятом ответе
SebNag
Это совсем не так. В нереакторе потоков столько же, сколько в схеме реактора. Вместо цикла событий у вас может быть один «ведущий» поток, который не использует шаблон наблюдатель / слушатель событий. Такая же производительность.
Zombies