2012-07-16 96 views
1

我开始让我的2D游戏/引擎,但不知道最好的线程架构,以处理在服务器端的客户端。线程架构,游戏服务器

起初,我在想一个主题,每个地图的设计,而不是一个线程每个用户。但是还有另一种理想的方法?

在我的概念地图线程,该线程将只在地图上的播放器的入口被创建,它倒空后,很快就会被破坏。但有了这个概念,玩家数量过多的地图(例如玩家商店)可能会导致严重滞后。

随着用户线程化方法,将有螺纹的高数量的 - 并且因此,存储器的高分配。

那么,这是另一种更好的方法来做到这一点?

+1

也许一个服务器范围的线程池映射到更多的用户使用更多的线程,而不是映射很少的线程。 – lesderid 2012-07-16 15:07:56

+3

尝试将你的游戏逻辑重写为状态机的某些东西,在这里你可以调用'map.Step()'从任何线程前进它。然后,您可以很容易地在使用线程池,固定数量的线程或甚至单个线程之间切换。 – 2012-07-16 15:12:06

+0

Cory'+1'将你的游戏逻辑改写成状态机的东西' - 稍微复杂一点,但你需要这种复杂应用程序的灵活性。 – 2012-07-16 15:19:24

回答

1

回答你的问题是只使用一个线程来模拟许多游戏实例。由于游戏编程的复杂性以及以任何有意义/安全/有益的方式划分存储器访问的困难,因此很少有游戏从多线程中受益的情况。即使是你听说过的最大游戏的服务器都是单线程的,可以用于整个游戏逻辑。例如暗黑破坏神式的游戏每个核心有1个线程,并且每个线程负责数百个游戏,并有十几个微小的跨线程(真正的跨机器)逻辑用于旋转游戏。

1

你会从mulithreading弓当你的服务器有多个CPU内核的一些好处。所以如果你的游戏拱是纯粹的事件驱动的(你永远不会等待事件处理程序中的任何东西),那么最好的性能就是线程数等于CPU核心数。