Как сделать многопоточность в minecraft

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

Spigot / Paper предлагает настройки, которые значительно улучшают производительность сервера Майнкрафт. В этом руководству представлены предлагаемые значения, позволяющие получить максимальную отдачу от вашего сервера без ущерба для игрового процесса.

Предварительная генерация карты

Предварительная генерация карты имеет большое влияние на устранение лагов на сервере Майнкрафт. Обязательно сделайте это на своем сервере.

  1. Установите плагин WorldBorder
  2. Поставьте разумное ограничение по размерам карты
  3. Пропишите команду: /wb fill
  4. Подождите… это может занять вплоть до нескольких часов в зависимости от размера карты. В идеале это нужно делать до того, как карта будет запущена, так как это вызовет задержку.
  5. Оставьте ограничение мира, чтобы чанки больше никогда не создавались (тогда вся карта будет сразу прогружена и не будет лагов из-за прогрузки чанков).

Bukkit.yml

spawn-limits
По умолчанию: monsters: 70, animals: 10, water-animals: 15, water-ambient: 20, ambient: 15
Оптимизировано: monsters: 50, animals: 8, water-animals: 7, water-ambient: 10, ambient: 1
Влияние на производительность: Большое

chunk-gc.period-in-ticks
По умолчанию: 600
Оптимизировано: 400
Влияние на производительность: Среднее

➫ Позволяет быстрее выгружать свободные чанки. Чем меньше тиков, тем выше будет показатель TPS, про который вы можете прочитать в конце этой статьи.

ticks-per.(type)-spawns
По умолчанию: monsters:1, water:1, water-ambient:1, ambient:1
Оптимизировано: monsters:5, water:11, water-ambient:21, ambient:31
Влияние на производительность: Среднее

➫ Этот параметр устанавливает, как часто (в тиках) сервер пытается породить сущности. Увеличение времени между попытками спавна не должно повлиять на игровой процесс. Смещение частоты тиков больше распределяет их по времени.

Примечание: Увеличивайте значение только в том случае, если у вас значительные потери тиков при выполнении задачи mobSpawn.

Spigot.yml

save-user-cache-on-stop-only
По умолчанию: false
Оптимизировано: true
Влияние на производительность: Среднее

➫ Этот параметр отвечает за то, нужно ли серверу всегда хранить пользовательские данные (false) или отложить эту функцию до того момента, как сервер начнет перезапуск или выключится (true)? Это хорошая экономия TPS.

Примечание: регулярно делайте резервные копии, чтобы избежать потери данных в редких случаях фатального сбоя.

entity-activation-range
По умолчанию: animals:32, monsters:32, raiders: 48, misc:16
Оптимизировано: animals:16, monsters:24, raiders: 48, misc:8
Влияние на производительность: Среднее

➫ Существа за пределами этого диапазона будут отмечаться реже. Не устанавливайте слишком низкое значение, иначе вы можете нарушить поведение мобов (аггро, рейды и т.д.).

Примечание: Деревенских жителей следует оставлять в покое (если это возможно), чтобы защитить механику.

tick-inactive-villagers
По умолчанию: true
Оптимизировано: false
Влияние на производительность: Среднее

➫ Включение этого параметра предотвращает установку галочки для жителей за пределами диапазона активации.

Примечание: Ванильное поведение позволяет отмечать всех жителей в загруженных чанках. Включите опцию villagers-active-for-panic, чтобы спасти некоторые железные фермы от разрушения.

nerf-spawner-mobs
По умолчанию: false
Оптимизировано: true
Влияние на производительность: Среднее

➫ Когда включено, мобы из спавнеров не будут иметь ИИ (не будут плавать/атаковать/двигаться). Это большая экономия TPS для массивных ферм мобов, но также ухудшает поведение. Плагин ограничителя фермы может быть лучшим решением.

Примечание: в Paper есть опция, позволяющая заставить мобов, получивших повреждения, прыгать/плавать. Это исправляет фермы, толкающие воду.

Paper.yml

max-auto-save-chunks-per-tick
По умолчанию: 24
Оптимизировано: 6
Влияние на производительность: Большое

➫ Сохранение мира будет происходить с замедлением сохранения чанков. Очень важная функция для современных серверов Майнкрафт.

Примечание: Ниже 6 ставить не рекомендуется, есть возможность несохранения чанков!

max-entity-collisions (в Spigot.yml в некоторых сборках)
По умолчанию: 8
Оптимизировано: 2
Влияние на производительность: Среднее

➫ Зажатые объекты (кофемолки, фермы и т.д.) будут меньше сталкиваться и потреблять меньше TPS в процессе.

grass-spread-tick-rate
По умолчанию: 1
Оптимизировано: 4
Влияние на производительность: Среднее

➫ Время (в тиках) до того, как сервер попытается разбросать траву по частям. Это не окажет влияния на геймплей большинства типов игр.

hopper.disable-move-event
По умолчанию: false
Оптимизировано: true
Влияние на производительность: Большое

➫ Это значительно уменьшит отставание хоппера, поскольку предотвратит вызов InventoryMoveItemEvent для КАЖДОГО слота в контейнере.

Предупреждение: Плагины, которые прослушивают InventoryMoveItemEvent, будут сломаны.

prevent-moving-into-unloaded-chunks
По умолчанию: false
Оптимизировано: true
Влияние на производительность: Среднее

➫ Предотвращает попадание игроков в неактивный чанк. Такое происходит из-за лагов и может вызвать еще большие лаги.

use-faster-eigencraft-redstone
По умолчанию: false
Оптимизировано: true
Влияние на производительность: Большое

➫ Эта настройка сокращает анимацию и обновления работы редстоуна на 95%, при этом не ломая механизмы. Тестирование данной функции установило ускорение в 10 раз!

Server.properties

view-distance
По умолчанию: 10
Оптимизировано: 4-8
Влияние на производительность: Сильное

➫ Это самый важный параметр во всех ваших файлах, поскольку он ограничивает расстояние рендеринга чанков. Серверы с открытым миром (например, Survival) должны стремиться использовать значение 6+, но другие серверы с общим хостом, низкими характеристиками или большим количеством игроков могут использовать значение 4-5, если рендеринг чанков вызывает лаги.

TPS — отставания сервера

Для сервера показатель TPS является очень важным и самое максимальное значение TPS равно 20, именно с этой скоростью он и выполняет все задачи. Например, поведение мобов, скорость роста урожая, добыча блоков и многое другое. Чем ниже будет падать TPS сервера, тем больше зависаний будет на сервере. Блоки будут выпадать с задержкой, мобы будут зависать и все в этом духе. Если TPS упадет слишком низко, это может привести даже к краху всего сервера.

Значения TPS

20.0 = Супер — Ваш сервер в идеальном состоянии.
19.95 — 19.99 = Хорошо — Небольшие потери TPS. Почти не влияют на работу сервера.
18.5 — 19.94 = Играбельно — Есть некоторые подвисания, но особо не напрягают.
16.0 — 18.4 = Плохо — Достаточно частые подвисания, нужно искать проблемы в сервере.
= Можете сразу создавать новый сервер…

Ping — задержка подключения

Пинг показывает, количество времени (в миллисекундах) требуемое для обработки данных игрока на сервере. Чем дальше игрок географически находится от сервера, тем дольше будет доходить данные и тем больше будет пинг. Как владелец сервера вы должны разместить свой сервер в регионе, где вы предпочитаете иметь свою базу игроков, или в регионе, который находится на близком расстоянии ко всей вашей аудитории.

Пример: Если взять хостинг с датацентром в США, а ваши игроки будут из России или других стран СНГ, тогда у всех игроков будет очень высокий пинг и у них будут задержки. Опять же если ваши игроки из России, необязательно покупать хостинг с датацентром в России, можно брать в Германии, Франции. Там достаточно играбельный пинг и многие проекты держат там сервера.

Показатели пинга

1 — 90 = Супер!
91 — 179 = Хорошо — Могут быть неудобства во время PvP.
180 — 299 = Плохо — Постоянные зависания во время взаимодействия с блоками/игроками/мобами.
300 — 499 = Ужасно — Почти нереально играть.
500+ = Пора искать сервер поближе к вам.



Объяснение из гугла. Я, правда, нифига не понял, но может тебе будет полезно.


Сейм щит, довольно бессвязный набор фактов. Зато хотя бы появилось подтверждение того, что это костыль, упирающийся в планировщик.

А так было непонятно чтоле? Само название потока про это говорит.


На заборе тоже много что написано. Я по названию вообще ожидал, что внутри будет бегать в бесконечном цикле поток, отмеряющий интервалы времени более точно, чем нативный слип, а там вот это вот.

Это если я правильно помню костыль для таймера windows. Дефолтный интервал там что-то вроде 10ms, а такими приседаниями можно поднять до 1ms. Как эот конкретно работает уже никто не помнит, но вроде как раз соль в вызове sleep с большим интервалом.

Вообще история с таймером windows давняя, обычно советуют включить Windows Media Player который автоматически вызывает поднятие разрешения таймера. И метод в WinAPI есть. Но поскольку майн на жабе, то чтобы не тащить dll с вызовом одного метода, сделали так (видимо в jvm торчит вызов увеличения разрешения таймера при вызове sleep с большим значением).

Майн - вещь со слабо развитой многопоточностью для такого размера софтины, разных потоков в нём всего штук 10

думаете лучше выбросить event-loop и сделать по потоку на юзверя? ;)


Не использовать многопоточность в мире, где 32 аппаратных потока уже у консьюмерских процессоров это точно глупо. А какую модель I/O использовать это вообще другой вопрос.


Платформонезависимость так платформонезависима. Я начинаю понемногу понимать, почему жава проиграла шарпу десктоп — потому что кодеры сана не дружили с виндой, хотя она являлась №1 десктопной платформой на тот момент.

Но поскольку майн на жабе, то чтобы не тащить dll с вызовом одного метода, сделали так (видимо в jvm торчит вызов увеличения разрешения таймера при вызове sleep с большим значением).

NtSetTimerResolution лежит в ntdll.dll, которую загружают абсолютно все win32 приложения.


Не использовать многопоточность в мире, где 32 аппаратных потока уже у консьюмерских процессоров это точно глупо

Как показывает практика, малое число кодеров способны работать с кучей потоков и сохранять хорошую отзывчивость. Порой руки настолько кривые, что даже с быстрым системным таймером отклик получается 500+ мс. Не помню, где такой прикол был, по-моему Watch dogs 2 на гипертредовом интеле.

Да, в линукс добавили в 2.6 родные потоки и футексы, но, блин, 2004 год, а до тех пор это были процессы с общей памятью, пайпы для синхронизации, и прочие костыльные радости. Ну и самая главная проблема всех юниксов — это наличие форка. Пока в систему не добавят гарантию защиты от форка, написание многопотоков будет сплошным костылестроением. Sun один из первых это осознал и добавил в Solaris posix_spawn, который запускает процесс без форка. Я вот сейчас свою либу пишу, и с ужасом подумываю о том, что произойдет, если какой-то поехавший решит использовать ее совместно с форком из питонового multiprocessing.

Здравствуйте, я администратор сервера игры Minecraft, работает на craftbukkit, все вроде бы хорошо, но есть одна проблема. Сервер работает на одно ядро. Недавно прочел статью на хабре, что можно реализовать много поточность в java. Будте так любезны, помогите.

Java сервлет-обеспечение многопоточности , SingleThreadModel - depricated?
Здравствуйте!Начал изучать Java сервлеты по книге автора Буди Курняван-Создание web приложений.

Реализация многопоточности в консоли
Доброго времени суток. Не могу разобраться в многопоточности. Реализовано перемещение по меню с.

Реализация многопоточности в GUI приложении
Здравствуйте! Заранее извиняюсь за, возможно, глупые вопросы по поводу этой темы, но они.


Плата за выполнение 4-8к в зависимости от качества
задача: сделать многопоточную загрузку чанков на клиенте для улучшения работы (быстродействия) клиента.

Попрошайка


rogue_one

Flawless

Короче пацаны. Типы очень странные. предоставил куда пруфов,что я кодер и работаю на крупном проекте. Говорю предоплату в 50% и сказал срок. Так они начали ныть мол платить не будем,только после работы и после проверки работоспособности. Как же я орнул с него. Просто категорически не советую этих ребят.

rogue_one

Вроде и логично, но в кубодев части комъюнити VK практически каждый адекватный человек знает, что упомянутый в "Связаться" обманщик. Он свою "карьеру" начал еще с обмана ZIV'a/Фолкена на EXBO (тогда MCGC). Его ники и вк: Даниил Евграф (текущий) aka Daniel Lanade aka Mr Orange (самый первый) и еще куча твинков. На него даже пруфы не нужно вбрасывать, повторюсь любой прошаренный человек о нём знает. И вот такие "экземпляры" пишут сюда

Попрошайка


@rogue_one он сюда не вижу что-бы что-то писал, я же не он, про его обманы не знаю, но с точки зрения логики отдавать 50% за работу которая может быть не выполнена это бред.

P.S. А по поводу обмана людей на EXBO я бы относился бы к человеку положительно, зная что EXBO сносят системы некоторым игрокам)

Мошенник
Мошенник

Вроде и логично, но в кубодев части комъюнити VK практически каждый адекватный человек знает, что упомянутый в "Связаться" обманщик. Он свою "карьеру" начал еще с обмана ZIV'a/Фолкена на EXBO (тогда MCGC). Его ники и вк: Даниил Евграф (текущий) aka Daniel Lanade aka Mr Orange (самый первый) и еще куча твинков. На него даже пруфы не нужно вбрасывать, повторюсь любой прошаренный человек о нём знает. И вот такие "экземпляры" пишут сюда

Мы кстати там BOEX открыли, ваш говно сосалкрафт закроем.
Там кстати поговаривают, что кексба сносит системы у игроков за читы и у неугодных. То есть, заливают раточки. Кто тут еще из нас "экземпляр"?

Читайте также: