Как можно объединить несколько ядер / потоков в один поток?

Я запускаю большой сервер minecraft, сторона сервера minecraft однопоточная. Все делается в основном игровом цикле. Если Mojang сделает серверную часть Minecraft многопоточной, серверы Minecraft сэкономят 2 миллиона долларов в год за счет аренды меньшего количества оборудования.

Во всяком случае, я слышал об этих слухах и теориях. Мне никогда не удавалось найти это в Google и понять это.

Есть ли способ взять многоядерный процессор и преобразовать его в одноядерный, однопоточный?

Я предполагал, что программное обеспечение гипервизора будет работать в многопоточном режиме и, если его можно настроить на одно ядро, оно преобразует несколько ядер в одно ядро.

Я подошел к моему другу программисту Java с этой идеей. И он сказал мне, что это невозможно, потому что каждый отдельный поток не может знать, что делать. Я не помню, что именно он сказал, но он в основном сказал, что это невозможно.

Серверы Minecraft тратят более 700 долларов в месяц на аренду оборудования, разогнанного до 4,5 ГГц. Почему? потому что серверы по умолчанию стоят 100-150 и стоят от 3,8 до 4,5.

Разогнанный сервер увеличит производительность одного потока на 1/8. Это заставит сервер удерживать больше игроков. Чем больше игроков может вместить сервер, тем больше денег он может заработать.

Таким образом, вместо того, чтобы покупать разогнанные серверы по завышенной цене, было бы гораздо эффективнее купить серверы quad proq E5 и подключить их к одному потоку, побив все рекорды по производительности и количеству игроков.

Я понимаю, что для mojang наиболее эффективным было бы просто сделать майнкрафт многопоточным. Для этого потребуется полностью переписать весь код.

Они не хотят этого делать. Аккаунт в майнкрафте стоит 26 долларов. Они продали 20 миллионов. Они катаются в грязно-богатом тесте, делая глупые обновления контента вместо того, чтобы исправлять многопоточность серверов Minecraft.

даже игровой клиент minecraft не является многопоточным.

Итак, вопрос в том, можно ли объединить несколько ядер процессора для достижения благочестивой производительности одного потока? если да, то как?

Я слышал, что это можно сделать, но накладные расходы были бы безумными.

Во всяком случае, из расчета накладных расходов?


person user2656801    schedule 21.09.2013    source источник


Ответы (2)


Если бы был способ сделать это, мы бы это сделали. Проблема проста - программа, которую мы запускаем, предоставляет нам только один поток инструкций.

Представьте себе шаги, через которые проходит человек, чтобы подготовиться к работе утром. Они встают, принимают душ, одеваются, готовят завтрак, завтракают и так далее. Имея полный список шагов, вы, вероятно, могли бы найти эффективные способы перекрытия задач, если бы у вас было несколько человек. Например, один человек мог подбирать одежду, пока кто-то готовил завтрак. Но если бы вам сообщали каждый шаг только тогда, когда предыдущий шаг был завершен, это было бы безнадежно.

Однопоточный код сообщает вам каждый шаг, только когда предыдущий шаг завершен.

person David Schwartz    schedule 21.09.2013
comment
:( aww ‹/ 3 надежды и мечты разбиты - person user2656801; 21.09.2013
comment
Что ж, для C ++ есть такие вещи, как openmp, поэтому можно автоматически создавать многопоточные циклы и процедуры. Такого прекомпилятора для Java не существует, так что (на данный момент) это правильно. - person Boris the Spider; 21.09.2013
comment
@BoristheSpider OpenMP работает, потому что программист сообщает компилятору, как шаги могут безопасно перекрываться. Это просто другой способ написания многопоточного кода. - person David Schwartz; 21.09.2013

Minecraft потребует полного перекодирования, поскольку в настоящее время нет способа сделать программу, не предназначенную для многоядерной обработки, с использованием более одного ядра. К счастью, несколько групп действительно выполнили перекодировку, самая большая из которых - PaperMC. Однако я не знаю, сработал ли их многоядерный проект. Мод под названием натрий для ткани, а также OptiFine позволяют использовать многоядерность на клиенте. Вы даже можете проголосовать за то, чтобы Mojang сделал это на сайте предложений по адресу feedback.minecraft.net.

person valkyrie_pilot    schedule 01.09.2020