【问题标题】:How can multiple cores/threads be combined into a single thread?如何将多个核心/线程组合成一个线程?
【发布时间】:2013-09-21 19:14:34
【问题描述】:

我运行一个大型的 Minecraft 服务器,Minecraft 服务器端是单线程的。一切都在主游戏循环中完成。如果 Mojang 让 Minecraft 服务器端多线程,Minecraft 服务器每年可以通过租用更少的硬件来节省 200 万美元。

反正我听说过这些谣言和理论。我从来没有能够谷歌它并弄清楚。

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

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

我带着这个想法联系了我的 Java 程序员朋友。他告诉我这是不可能的,因为不可能每个单独的线程都知道该做什么。我不记得他到底说了什么,但他基本上说这是不可能的。

Minecraft 服务器每月花费超过 700 美元租用超频至 4.5 ghz 的硬件。为什么?因为默认服务器的价格为 100-150,价格为 3.8 到 4.5。

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

因此,与其购买超频服务器,不如购买 quad proq E5 服务器并将它们连接到一个线程中,从而打破性能和玩家数量的所有记录。

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

他们不想那样做。我的世界帐户费用为 26 美元。他们已经卖出了2000万。他们在滚滚滚滚滚滚滚滚,进行愚蠢的内容更新,而不是将我的世界服务器修复为多线程。

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

那么问题来了,有没有可能组合多个cpu核心来实现神级的单线程性能呢?如果有,怎么做?

我听说可以做到,但开销会很大。

无论如何计算开销?

【问题讨论】:

    标签: java multithreading performance minecraft


    【解决方案1】:

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

    想象一个人早上准备工作所经历的步骤。他们起床、洗澡、穿衣、做早餐、吃早餐等等。有了完整的步骤列表,如果您有不止一个人,您可能会找到重叠任务的有效方法。例如,一个人可以在其他人做早餐时挑选衣服。但如果只在上一步完成时才告诉你每一步,那就没有希望了。

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

    【讨论】:

    • :( aww 3 希望和梦想破灭了
    • 嗯,C++ 有类似openmp 之类的东西,因此可以自动执行多线程循环和例程。 Java 没有这样的预编译器,所以(目前)这是正确的。
    • @BoristheSpider OpenMP 之所以有效,是因为程序员告诉编译器这些步骤如何安全地重叠。这只是编写多线程代码的另一种方式。
    【解决方案2】:

    Minecraft 需要完全重新编码,因为目前没有办法让不是为多核设计的程序使用多个内核。幸运的是,实际上已经有几个小组进行了重新编码,其中 PaperMC 是最大的。但是,我不知道他们的多核项目是否真的成功了。一个名为 sodium for fabric 的 mod 以及 OptiFine 都允许在客户端上进行多核处理。您甚至可以在反馈.minecraft.net 上的建议网站上投票支持 Mojang。

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 2014-02-19
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      相关资源
      最近更新 更多