当前位置: 首页 > 知识库问答 >
问题:

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

柳绪
2023-03-14

我运行一个大型的minecraft服务器,minecraft服务器端是单线程的。一切都是在主游戏循环中完成的。如果Mojang使minecraft服务器端多线程化,minecraft服务器每年将节省200万美元,因为租用的硬件更少。

不管怎样,我听说过这些谣言和理论。我从来都无法用谷歌搜索并弄清楚。

有没有必要使用多核cpu,并将其转换为单核、单线程?

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

我向我的java程序员朋友提出了这个想法。他告诉我这是不可能的,因为没有办法每个线程都知道该做什么。我不记得他具体说了什么,但他基本上说这是不可能的。

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

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

因此,与其购买超频服务器,不如购买quad proq E5服务器并将其连接到一个线程中,打破性能和玩家数量的所有记录,这样效率会更高。

我知道对mojang来说,最有效的事情就是让minecraft多线程化。这需要完全重写所有代码。

他们不想那样做。一个minecraft账户需要26美元。他们已经卖出了2000万。他们正在赚大钱,进行愚蠢的内容更新,而不是将minecraft服务器固定为多线程。

即使是minecraft游戏客户端也不是多线程的。

所以问题是,有没有可能结合多个cpu核来实现神圣的单线程性能?如果是,如何?

我听说这是可以做到的,但开销太大了。

算一下开销?

共有2个答案

欧照
2023-03-14

《我的世界》需要完全重新编码,因为目前没有办法让一个不是为多核使用而设计的程序比一个核多。幸运的是,几个小组实际上已经完成了重新编码,其中PaperMC是最大的。然而,我不知道他们的多核项目是否真的成功了。一个名为织物钠的mod和OptiFine都允许在客户端进行多核处理。你甚至可以在feedback.minecraft.net.的建议网站上投票支持Mojang这样做

张可人
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 有人可以提供解释,说明当JVM仅是Linux上的单个进程时,Java多线程程序(例如Tomcat servlet容器)如何能够使用CPU的所有内核?有没有很好的深入文章详细介绍了该主题? 编辑#1 :我不是在寻找有关如何在Java中实现多线程程序的建议。我正在寻找有关JVM如何在Linux / Windows上内部管理以使用多个内核而仍是OS上的单个进程的解释。 编辑#2 :我设法找到

  • 通过组合曲线CurvePath可以把多个圆弧线、样条曲线、直线等多个曲线合并成一个曲线。 U型案例 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry // 绘制一个U型轮廓 var R = 80;//圆弧半径 var arc = new THREE.ArcCurve(0, 0, R, 0, Math.PI, true); // 半圆弧

  • 问题内容: 假设我的应用程序运行2个线程(例如渲染线程和游戏更新线程)。如果它运行在具有多核CPU的移动设备上(当今通常是这样),我是否可以期望在可能的情况下自动将线程分配给不同的内核? 我知道底层的OS内核(Android linux内核)决定调度。我的问题是我是否需要做 任何其他事情 才能启用多核功能,还是自动而透明的? 问题答案: 您需要做的是允许两个线程尽可能独立地运行。如果您有两个始终在

  • 面试问题 比如说,我们有一个在Employee表中有200万条记录的表,我们需要削减每个员工10%的工资(需要做一些处理),然后将其保存回collection。你怎样才能有效地做到这一点。 我问他,我们可以使用executor框架来创建多个线程,这些线程可以从表中获取值,然后我们可以处理并将其保存到列表中。 然后他问我,你将如何检查一个记录是否已经被处理,我不知道(如何做)。 甚至我也不确定我是否

  • 问题内容: 有什么方法可以简单地等待所有线程处理完成?例如,假设我有: 如何更改此方法,以便该方法在注释处暂停直到所有线程的方法退出?谢谢! 问题答案: 你将所有线程放入数组中,全部启动,然后进行循环 每个连接将阻塞,直到相应的线程完成为止。线程的完成顺序可能不同于你加入线程的顺序,但这不是问题:退出循环时,所有线程均已完成。

  • 我有4条线。每个人每x秒打印给定的字母x次。任务是一次启动3个线程,在至少一个前一个线程完成时启动第四个线程。我不知道如何通知最后一个线程在适当的时间运行。