据我所知,活动对象设计模式将一个(私有/专用)线程生命周期与一个对象,并使其工作在独立的数据上,从我读到的一些文档来看,这种范式的演变是因为两个原因,第一,管理原始线程将是痛苦的,第二,更多的线程争用共享资源不能很好地使用互斥和锁。对于第一个原因,我并不完全理解第二个原因。使对象活动只是使对象独立,但像锁/互斥体争用这样的问题仍然存在(因为我们仍然有共享队列/缓冲区),对象只是将共享责任委托给了消息队列。在我看来,这种设计模式的唯一优点是我必须在共享的对象(现在我只是将消息传递到共享队列,线程不再需要长时间阻塞互斥锁/锁,但它们仍然会阻塞并争夺发布消息/任务)。除了这种情况,有人能告诉更多的场景,这种设计模式将具有其他优势吗?
第二个问题是(我刚开始研究设计模式),活动对象,reactor和proactor设计模式。你如何决定哪种设计模式更有效,更适合你的需求。如果有人能展示一些例子来展示这三种设计模式的行为,哪一种具有比较优势,那就太好了。在不同的场景下的劣势。
我有点困惑,因为我已经使用了活动对象(使用共享线程安全缓冲区)和boost::asio(Proactor)来做类似的DISC东西,我想知道是否有人在处理问题时对不同模式的适用性有更多的见解。
2条答案
按热度按时间umuewwlo1#
ACE website有一些关于Active Object,Proactor和Reactor设计模式的非常好的论文。他们的意图的简短总结:
Active Object设计模式将方法执行从方法调用中分离出来,以增强并发性并简化对驻留在其自身控制线程中的对象的同步访问。也称为:Concurrent Object,Actor。
Proactor模式支持多个事件处理器的解复用和调度,这些事件处理器由异步事件的完成触发。该模式在Boost.Asio中使用得很频繁。
Reactor设计模式处理由一个或多个客户端并发交付给应用程序的服务请求。应用程序中的每个服务可能由几个方法组成,并由一个单独的事件处理程序表示,该事件处理程序负责分派特定于服务的请求。也称为:Dispatcher,Notifier。
k3bvogb12#
ACE working URL与详细的活动对象,前摄和React器的设计模式迁移到另一所大学的网站托管。