Использовать Активный объект или нет?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использовать Активный объект или нет?

Сообщение Anonymous »


Шаблон проектирования активного объекта, насколько я понимаю, связывает время жизни (частного/выделенного) потока с объектом и заставляет его работать с независимыми данными. Судя по некоторой документации, которую я читал, эволюция такого рода парадигмы произошла по двум причинам: во-первых, управление необработанными потоками было бы болезненным, а во-вторых, большее количество потоков, конкурирующих за общий ресурс, не очень хорошо масштабируется с использованием мьютексов и блокировок. хотя я согласен с первой причиной, я не вполне понимаю вторую. Активизация объекта просто делает объект независимым, но такие проблемы, как конкуренция за блокировку/мьютекс, все еще существуют (поскольку у нас все еще есть общая очередь/буфер), объект просто делегировал ответственность за совместное использование очереди сообщений. Единственным преимуществом этого шаблона проектирования, как я вижу, является случай, когда мне пришлось выполнять длинную асинхронную задачу для общего объекта (теперь, когда я просто передаю сообщение в общую очередь, потоки больше не должны надолго блокироваться в мьютексе/ блокировки, но они все равно будут блокировать и бороться за публикацию сообщений/задач). Помимо этого случая, кто-нибудь мог бы рассказать больше сценариев, в которых этот тип шаблона проектирования будет иметь другие преимущества.

Второй вопрос, который у меня есть (я только начал копаться в шаблонах проектирования), в чем концептуальная разница между шаблонами проектирования активного объекта, реактора и проактора. Как вы решаете, какой шаблон проектирования более эффективен и больше соответствует вашим требованиям? Было бы очень здорово, если бы кто-нибудь смог продемонстрировать конкретные примеры, показывающие, как будут вести себя три шаблона проектирования и какой из них имеет сравнительные преимущества/недостатки в различных сценариях.

Я немного сбит с толку, поскольку я использовал активный объект (который использовал общий потокобезопасный буфер) и boost::asio(Proactor) для выполнения аналогичных асинхронных операций, я хотел бы знать, есть ли у кого-нибудь еще понимание применимости различных шаблонов при решении проблемы.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»