每个核心设计的IO服务与单件

时间:2014-04-19 10:38:08

标签: c++ singleton boost-asio mutex

我正在开发当前的游戏服务器,目前我有一个设计问题。

游戏服务器有世界级(它的单身),当我从单个I / O服务改为每个核心的I / O服务时,我想我应该在我的World类中使用互斥。 因为来自客户端的数据包处理程序有时会使用World的函数执行操作。

有没有办法避免该单例中的互斥?

1 个答案:

答案 0 :(得分:0)

您可以使用Active Object模式。

因此,将World实现作为活动对象,实际上在其自己的线程上运行所有操作。

带有Boost Asio的Active Object模式示例如下:boost::asio and Active Object

无论是(性能方面)适合你让世界成为一个活跃的对象,我都说不出来。我有一种感觉,你应该/只是/不能从许多线程访问World,而只是在后台运行计算密集型的东西,你不需要锁来协调,或者锁定开销不重要。

在我的 comment here 中,我展示了使用无锁队列实现调度作业的替代方法。