Схема реактора - Reactor pattern
Реактор шаблон дизайна является обработка событий шаблон для обработки доставленных запросов на обслуживание одновременно обработчику службы одним или несколькими входами. Затем обработчик службы демультиплексы входящие запросы и синхронно отправляет их связанным обработчикам запросов.[1]
Структура
- Ресурсы
- Любой ресурс, который может предоставлять входные данные или потреблять выходные данные системы.
- Демультиплексор синхронных событий
- Использует цикл событий заблокировать на всех ресурсах. Демультиплексор отправляет ресурс диспетчеру, когда есть возможность запустить синхронную операцию с ресурсом без блокировки (Пример: синхронный вызов
читать()
будет заблокирован, если нет данных для чтения. Демультиплексор используетВыбрать()
на ресурсе, который блокируется, пока ресурс не станет доступен для чтения. В этом случае синхронный вызовчитать()
не будет блокироваться, и демультиплексор может отправить ресурс диспетчеру.) - Диспетчер
- Обрабатывает регистрацию и отмену регистрации обработчиков запросов. Отправляет ресурсы из демультиплексора в связанный обработчик запросов.
- Обработчик запросов
- Определенный приложением обработчик запросов и связанный с ним ресурс.
Характеристики
Все реакторные системы по определению однопоточные, но могут существовать в многопоточный Окружающая среда.
Преимущества
Шаблон реактора полностью отделяет специфичный для приложения код от реализации реактора, что означает, что компоненты приложения могут быть разделены на модульные, повторно используемые части.
Ограничения
Схему реактора может быть труднее отлаживать[2] чем процедурный шаблон из-за перевернутого потока управления. Кроме того, только синхронно вызывая обработчики запросов, шаблон реактора ограничивает максимальный параллелизм, особенно на симметричная многопроцессорная обработка аппаратное обеспечение. Масштабируемость шаблона реактора ограничивается не только синхронным вызовом обработчиков запросов, но и демультиплексором.[3]
Смотрите также
- Шаблон проактора (шаблон, который также демультиплексирует и отправляет события, но асинхронно)
- Сервер приложений
- C10k проблема
Рекомендации
- ^ Шмидт, Дуглас и др. Шаблонно-ориентированная архитектура программного обеспечения Том 2: Шаблоны для параллельных и сетевых объектов. Том 2. Wiley, 2000.
- ^ Шмидт, Дуглас К., Шаблон поведения объекта для демультиплексирования и диспетчеризации дескрипторов для синхронных событий (PDF)
- ^ Кегель, Дэн, Проблема C10K, получено 2007-07-28