0

所以我正在为我正在制作的游戏制作一个 Java 服务器,我想知道为每个玩家创建一个线程是否是一种矫枉过正的事情,考虑到服务器可能会同时让很多人在线。

多少线程是多少?,我应该每场比赛制作1个线程(它是大厅类型的游戏,您选择一场比赛并进入)还是每个玩家1个线程好?

4

3 回答 3

2

这完全取决于您的应用程序架构。在得出结论之前,我们需要了解几件事。

  1. 如果您为每个请求创建无限的线程,那么您的应用程序将遭受资源过度使用的困扰,并且您可能会遇到内存不足错误或 CPU 过度使用
  2. 如果您创建的线程数量非常少,那么您的应用程序将受到活力的影响
  3. 如果我们动态创建一个线程,它也需要相当多的资源

所以最好有 ThreadPool 并且线程池应该有固定的线程数。喜欢 Executors.newFixedThreadPool(NO_OF_THREADS);

同时,我们的武器库中应该有一个拒绝政策,其中一些是例如Silent discard, discard with an exception, caller runner (back push so that it will slowdown request inflow the way normal networks work) and discard old (depends on your priority set)

上述两件事都会为您提供一个强大的系统。抱歉,如果您觉得我无法正确回答您的问题。

编辑:我根据以下查询回答。

  1. 您可以通过 jmeter 测试您的应用程序并查看您的应用程序的执行情况。您还可以通过组合一些工作站来使用 JMeter进行一些分布式负载测试。它将为您提供真实的图片以及为典型工作负载提供服务的线程。
  2. 有时像这样的公式no of threads = 2 * no_of_cores * no_of_disks * percentage CPU utilization you need * (1 + (W/ C))

(W/C) 是表示等待时间到计算时间的分数。

于 2013-07-06T20:54:58.520 回答
0

我在我的游戏中为每个玩家创建线程,同时有 20-30 个线程并且没有延迟。所以对于我认为的每个球员。

于 2013-07-06T20:24:01.850 回答
0

如果您询问在系统关闭之前可以创建多少个线程,它可能是几千个线程,这取决于您的操作系统和每个线程需要多少内存。

我们无法为您做出这种设计选择,因为我们不知道每个线程的作用,但如果为每个游戏使用一个线程很重要,并且优化是否对您的目的很重要(系统所需的可扩展性?商业还是家庭作业?) ,我会尽可能少地使用线程。

于 2013-07-06T20:43:29.837 回答