Использовать Активный объект или нет? ⇐ C++
-
Anonymous
Использовать Активный объект или нет?
Шаблон проектирования активного объекта, насколько я понимаю, связывает время жизни (частного/выделенного) потока с объектом и заставляет его работать с независимыми данными. Судя по некоторой документации, которую я читал, эволюция такого рода парадигмы произошла по двум причинам: во-первых, управление необработанными потоками было бы болезненным, а во-вторых, большее количество потоков, конкурирующих за общий ресурс, не очень хорошо масштабируется с использованием мьютексов и блокировок. хотя я согласен с первой причиной, я не вполне понимаю вторую. Активизация объекта просто делает объект независимым, но такие проблемы, как конкуренция за блокировку/мьютекс, все еще существуют (поскольку у нас все еще есть общая очередь/буфер), объект просто делегировал ответственность за совместное использование очереди сообщений. Единственным преимуществом этого шаблона проектирования, как я вижу, является случай, когда мне пришлось выполнять длинную асинхронную задачу для общего объекта (теперь, когда я просто передаю сообщение в общую очередь, потоки больше не должны надолго блокироваться в мьютексе/ блокировки, но они все равно будут блокировать и бороться за публикацию сообщений/задач). Помимо этого случая, кто-нибудь мог бы рассказать больше сценариев, в которых этот тип шаблона проектирования будет иметь другие преимущества.
Второй вопрос, который у меня есть (я только начал копаться в шаблонах проектирования), в чем концептуальная разница между шаблонами проектирования активного объекта, реактора и проактора. Как вы решаете, какой шаблон проектирования более эффективен и больше соответствует вашим требованиям? Было бы очень здорово, если бы кто-нибудь смог продемонстрировать конкретные примеры, показывающие, как будут вести себя три шаблона проектирования и какой из них имеет сравнительные преимущества/недостатки в различных сценариях.
Я немного сбит с толку, поскольку я использовал активный объект (который использовал общий потокобезопасный буфер) и boost::asio(Proactor) для выполнения аналогичных асинхронных операций, я хотел бы знать, есть ли у кого-нибудь еще понимание применимости различных шаблонов при решении проблемы.
Шаблон проектирования активного объекта, насколько я понимаю, связывает время жизни (частного/выделенного) потока с объектом и заставляет его работать с независимыми данными. Судя по некоторой документации, которую я читал, эволюция такого рода парадигмы произошла по двум причинам: во-первых, управление необработанными потоками было бы болезненным, а во-вторых, большее количество потоков, конкурирующих за общий ресурс, не очень хорошо масштабируется с использованием мьютексов и блокировок. хотя я согласен с первой причиной, я не вполне понимаю вторую. Активизация объекта просто делает объект независимым, но такие проблемы, как конкуренция за блокировку/мьютекс, все еще существуют (поскольку у нас все еще есть общая очередь/буфер), объект просто делегировал ответственность за совместное использование очереди сообщений. Единственным преимуществом этого шаблона проектирования, как я вижу, является случай, когда мне пришлось выполнять длинную асинхронную задачу для общего объекта (теперь, когда я просто передаю сообщение в общую очередь, потоки больше не должны надолго блокироваться в мьютексе/ блокировки, но они все равно будут блокировать и бороться за публикацию сообщений/задач). Помимо этого случая, кто-нибудь мог бы рассказать больше сценариев, в которых этот тип шаблона проектирования будет иметь другие преимущества.
Второй вопрос, который у меня есть (я только начал копаться в шаблонах проектирования), в чем концептуальная разница между шаблонами проектирования активного объекта, реактора и проактора. Как вы решаете, какой шаблон проектирования более эффективен и больше соответствует вашим требованиям? Было бы очень здорово, если бы кто-нибудь смог продемонстрировать конкретные примеры, показывающие, как будут вести себя три шаблона проектирования и какой из них имеет сравнительные преимущества/недостатки в различных сценариях.
Я немного сбит с толку, поскольку я использовал активный объект (который использовал общий потокобезопасный буфер) и boost::asio(Proactor) для выполнения аналогичных асинхронных операций, я хотел бы знать, есть ли у кого-нибудь еще понимание применимости различных шаблонов при решении проблемы.
Мобильная версия