是否使用Active对象?

use*_*156 7 c++ design-patterns boost-asio reactor active-objects

据我所知,活动对象设计模式是将一个(私有/专用)线程生命周期与一个对象捆绑在一起并使其在独立数据上工作.从我读到的一些文档中,这种范式的演变是由于两个原因,第一,管理原始线程会很痛苦,第二个争用共享资源的线程使用互斥锁和锁不能很好地扩展.虽然我同意第一个原因,但我并不完全理解第二个原因.使对象处于活动状态只会使对象独立,但是锁定/互斥锁争用等问题仍然存在(因为我们仍然有共享队列/缓冲区),该对象只是将共享责任委派给消息队列.我看到的这种设计模式的唯一优势是我不得不在共享对象上执行长的异步任务(现在我只是将消息传递给共享队列,线程不再需要在互斥锁上长时间阻塞/锁,但他们仍然会阻止并争夺发布消息/任务).除了这种情况,有人可以告诉更多场景,这种设计模式将具有其他优势.

我的第二个问题是(我刚开始挖掘设计模式),活动对象,反应堆和前驱设计模式之间的概念差异是什么.您如何确定哪种设计模式更有效并更符合您的要求.如果某人能够展示某些示例来展示这三种设计模式将如何表现以及哪种模式在不同场景中具有比较优势/劣势,那将是非常好的.

我有点困惑,因为我使用了活动对象(使用共享线程安全缓冲区)和boost :: asio(Proactor)来做类似的异步内容,我想知道是否有任何人对适用性有更多的见解接近问题时的不同模式

Tem*_*Rex 5

ACE网站对一些非常优秀的论文活动对象, EN 反应器的设计模式.他们意图的简短摘要:

所述主动对象的设计模式与方法调用去耦合方法执行,以提高并发性和简化到驻留在其自己的控制线程的对象的同步访问.又称:Concurrent Object,Actor.

所述模式支持多个事件处理程序,这是由异步事件的完成来触发的解复用和调度.这种模式在Boost.Asio中大量使用.

反应堆的设计模式处理由一个或多个客户端同时提供给应用程序的服务请求.应用程序中的每个服务可能包含多个方法,并由一个单独的事件处理程序表示,该处理程序负责调度特定于服务的请求.也称为:Dispatcher,Notifier.