Просте пояснення для “схеми реактора” з її додатками [закрито]


88

Шаблон реактора пояснюється у вікіпедії , і він занадто абстрактний. Чи можете ви описати цю закономірність більш конкретно? В ідеалі з фрагментами коду або діаграмами класів високого рівня, що описують деякі програми реакторної схеми.


3
Виявило, що це питання є чудовою відповіддю - stackoverflow.com/questions/9138294/…
Райан Гіббонс,

Відповіді:


37

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

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


Як ви помітите, читаючи статтю, Дуглас Шмідт та ін. Реалізували високоефективний та модульний фреймворк C ++ під назвою Адаптивне комунікаційне середовище, де шаблон реактора відіграє центральну роль. Сам фреймворк використовує безліч шаблонів дизайну, і його варто вивчити лише заради цього. Якщо ви шукаєте портативний фреймворк для створення високомасштабованих серверних систем C ++, то на ACE варто поглянути.
user2015735

1
@reese Посилання порушено сьогодні, людина :(
Аллан Чуа,

1
@AllanChua Я думаю, що знайшов - dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
sergeyrar

3
OP попросив «простого, конкретного» пояснення, і ви запропонували щось, що є навіть більш абстрактним, ніж Вікіпедія ...
Чже,

22

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


1
Проголосуйте проти, оскільки це неправильно
SebNag

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

2
"шаблон реактора відповідає за демультиплексування та диспетчеризацію декількох обробників подій, які спрацьовують, коли можливо ініціювати операцію синхронно без блокування." з паперу, зв’язаного з прийнятим викликом
SebNag,

Це зовсім неправда. У нереакторі є стільки ниток, скільки в схемі реактора. Замість циклу подій ви можете мати єдиний "рушійний" потік, який не використовує шаблон спостерігача / слухача подій. Однакові показники.
Зомбі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.