我正在开发当前的游戏服务器,目前我有一个设计问题。
游戏服务器有世界级(它的单身),当我从单个I / O服务改为每个核心的I / O服务时,我想我应该在我的World类中使用互斥。 因为来自客户端的数据包处理程序有时会使用World的函数执行操作。
有没有办法避免该单例中的互斥?
答案 0 :(得分:0)
您可以使用Active Object模式。
因此,将World实现作为活动对象,实际上在其自己的线程上运行所有操作。
带有Boost Asio的Active Object模式示例如下:boost::asio and Active Object
无论是(性能方面)适合你让世界成为一个活跃的对象,我都说不出来。我有一种感觉,你应该/只是/不能从许多线程访问World,而只是在后台运行计算密集型的东西,你不需要锁来协调,或者锁定开销不重要。
在我的 comment here 中,我展示了使用无锁队列实现调度作业的替代方法。