HOSE - патч на Spigot

GoogleTan

Картошка :3
1,354
43
310
Кто работал с ним? Насколько большой прирост?
 
145
7
31
Судя по информации на гитхабе, там ентити обрабатываются параллельно. Если на сервере много мобов, то значительный прирост будет.
 

GoogleTan

Картошка :3
1,354
43
310
Я это читала, но мне интересно пообщаться с теми кто это использует этот патч.
 
63
5
20
В нормальном проекте вряд ли кто то это использует, т.к. скорее всего имеет кучу скелетов в шкафах, которые могут нарушить нормальную работу сервера в любой момент. А так да, судя по обзору, даёт значительный прирост производительности.
 
1,990
18
105
В принципе, судя по исходникам, там ничего сильно страшного со скелетами в шкафах. Во всяком случае я видел кусок кода, который инжектится в moveEntity и параллелит часть движения всех сущностей на серве, выглядит адекватно: потому что оно раскидывает задачу по куче воркеров и тут же вызывает join, так что с синхронизацией даже и делать ничего не надо, оно сразу же ждет пока все потоки отработают, и идет дальше синхронно.
Суммарно, по-моему, там не очень много таких мест, но выбраны самые дорогие участки кода для параллелизации.

Но на гитхабе таки висят issues с не очень красивыми крашами, это печаль.
 
170
2
53
Кто работал с ним? Насколько большой прирост?
Уделил время Hose, Работает хорошо, даже слишком, замена всех листов на Queue вызывает негодование у части форж, из-за чего пришлось отказаться. Есть пару багов, которых, пока, так и не удалось пофиксить, один из них скрывается в итераторе линкедлиста if(iterator.hasNext()) iterator.next() может выдать NullPointerException, что в свою очередь дополнительный краш и потеря стабильности, заметил что это происходит +- когда игрок меняет чанк. Прирост очень большой, тик ентити не влияет на тпс, если сервер не вывозит ентити те просто зависают, пока сервер с ними не справится. Если тут есть люди, которые хотят покопать асинхронность в энтити, давайте создадим тему и сделаем это вместе?
 

GoogleTan

Картошка :3
1,354
43
310
Нее... Я еще 10 не вкачала, пока не вкачаю не закончу! Хотя возможно остановлюсь на 9. Да и на улице холод +10 и дождь. Ноут, пледик и гамак......)
---------------------------------
Давайте создадим, только не на базе Tablecotch, а на базе чистого форджа. Потом может самим Forge отправим....
 
Последнее редактирование:
63
5
20
Ага, начнём, а потом группа людей лавочку закроют и будут в закрытую дописывать и в итоге продавать по дикой цене. Ha-ha classic
 
7,099
324
1,510
Чтобы это предотвратить достаточно будет того, чтобы ведущие разработчики не уходили и продолжали делать открытую версию
 
145
7
31
А что насчёт параллельного апдейта всех существ? С этим могут быть проблемы, разве это потокобезопасно?
Java:
entityList.parallelStream().forEach(ent -> {//hose
        if (!entityLimiter.shouldContinue()) {
            return;
        }
        Entity entity1 = ent.bB();

        if (entity1 != null) {
            if (!entity1.dead && entity1.w(entity)) {
                continue;
                if (!entity1.dead && entity1.w(ent)) {
                    return;
                }

                entity.stopRiding();
                ent.stopRiding();
            }

            this.methodProfiler.a("tick");
            if (!entity.dead && !(entity instanceof EntityPlayer)) {
                if (!ent.dead && !(ent instanceof EntityPlayer)) {
                    try {
                        SpigotTimings.tickEntityTimer.startTiming(); // Spigot
                        this.h(ent);
                        SpigotTimings.tickEntityTimer.stopTiming(); // Spigot
                    } catch (Throwable throwable1) {
                        crashreport1 = CrashReport.a(throwable1, "Ticking entity");
                        crashreportsystemdetails1 = crashreport1.a("Entity being ticked");
                        entity.appendEntityCrashDetails(crashreportsystemdetails1);
                        ent.appendEntityCrashDetails(crashreportsystemdetails1);
                        throw new ReportedException(crashreport1);
                    }
                }
            }
 
145
7
31
В апдейте существ, они что-то изменяют в мире, который не потокобезопасный и взаимодействуют с другими мобами, но основной поток не выполняется, пока все существа не обновятся, поэтому сомневаюсь и спрашиваю тут у вас
 
Последнее редактирование:
Сверху