多个核心/线程如何组合成一个线程?

时间:2013-09-21 19:14:35

标签: java multithreading performance minecraft

我运行了一个大型的Minecraft服务器,我的服务器端是单线程的。一切都在主游戏循环中完成。如果Mojang使Minecraft服务器端成为多线程,那么Minecraft服务器每年可以节省200万美元的租金。

无论如何,我听说过这些谣言和理论。我从来没有能够谷歌并想出来。

有没有采用多核cpu,并将其转换为单核,单线程?

我一直在推测虚拟机管理程序软件将运行多线程,如果它可以配置为单核,它会将多个内核转换为单个内核。

我找到了这个想法的java程序员朋友。他告诉我这是不可能的,因为每个人都不知道该怎么做。我不记得他说的到底是什么,但他基本上说这是不可能的。

Minecraft服务器每月花费超过700美元租用硬件超频至4.5加仑。为什么?因为默认服务器的成本是100到150,而且是3.8到4.5。

超频服务器会将单线程性能提高1/8。这将导致服务器容纳更多玩家。服务器可以容纳的玩家越多,它可以赚的钱就越多。

因此,购买四路pro5 E5服务器并将它们连接成一个线程,打破性能和播放器数量的所有记录,而不是购买超频价格服务器。

我知道最有效的方法是让mojang让我的世界多线程化。这需要完全重写所有代码。

他们不想这样做。一个我的世界帐户花费26美元。他们卖了2000万。他们正在肮脏的面团滚动,制作愚蠢的内容更新,而不是修复Minecraft服务器多线程。

甚至我的游戏客户端也不是多线程的。

所以问题是,是否可以组合多个cpu内核来实现虔诚的单线程性能?如果是这样,怎么样?

我听说可以做到,但开销很疯狂。

无论如何计算开销?

2 个答案:

答案 0 :(得分:0)

如果有办法做到这一点,我们就会这样做。问题很简单 - 我们运行的程序只为我们提供了一个指令流。

想象一下,一个人在早上准备工作的步骤。他们起床,洗澡,穿衣服,做早餐,吃早餐等等。有了完整的步骤列表,如果你有多个人,你可能会想出有效的方法来重叠任务。例如,一个人可以在别人正在做早餐时挑选衣服。但是如果你只是告诉你上一步完成时的每一步,那就毫无希望了。

单线程代码仅告诉您上一步完成时的每一步。

答案 1 :(得分:0)

《我的世界》需要重新编码,因为目前尚无办法使非多核程序使用一个以上的核。幸运的是,实际上有几个小组进行了重新编码,其中PaperMC是最大的。但是,我不知道他们的多核项目是否真正可行。称为钠的面料mod和OptiFine都可以在客户端上进行多重取芯。您甚至可以在建议网站feedback.minecraft.net上投票支持Mojang这样做。