我开始制作我的 2D 游戏/引擎,但不知道处理服务器端客户端的最佳线程架构。
最初,我考虑的是 Thread-per-map 设计,而不是 Thread-per-user。但是还有另一种理想的方法吗?
在我的地图线程概念中,线程只会在地图上玩家的入口处创建,并且会在它清空后很快被销毁。但是有了这个概念,有太多玩家(例如,玩家商店)的地图可能会导致严重的延迟。
使用用户线程方法,会有大量线程 - 因此会分配大量内存。
那么,还有另一种更好的方法来做到这一点吗?
我开始制作我的 2D 游戏/引擎,但不知道处理服务器端客户端的最佳线程架构。
最初,我考虑的是 Thread-per-map 设计,而不是 Thread-per-user。但是还有另一种理想的方法吗?
在我的地图线程概念中,线程只会在地图上玩家的入口处创建,并且会在它清空后很快被销毁。但是有了这个概念,有太多玩家(例如,玩家商店)的地图可能会导致严重的延迟。
使用用户线程方法,会有大量线程 - 因此会分配大量内存。
那么,还有另一种更好的方法来做到这一点吗?
您的问题的答案只是使用一个线程来模拟许多游戏实例。由于游戏编程的复杂性以及以任何有意义/安全/有益的方式划分内存访问的难度,游戏从多线程中受益的情况很少。即使是您听说过的大型游戏的服务器,对于整个游戏逻辑也是单线程的。例如,一个暗黑破坏神风格的游戏每个核心有 1 个线程,每个线程负责数百个游戏,并带有少量的跨线程(真正跨机器)逻辑来启动游戏。
当您的服务器具有多个 CPU 内核时,您将从多线程架构中获得一些好处。因此,如果您的游戏架构是纯事件驱动的(您从不在事件处理程序中等待任何内容),最佳性能将是线程数等于 CPU 核心数。