CanMove!? Первый шаг к осознанию подсознания.

Hitcher

Знаменитый
Местный
Сообщения
187
Розыгрыши
0
Репутация
1
Реакции
18
Баллы
1 280
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Acis 409
Здравствуйте!) захотелось поставить брейкпоинт на xyz и поклацать на f7 чтобы посмотреть как эти методы там работают... сделав всего лишь один маленький шаг в игре, это казалось так просто., я понял что процессов гораздо-значительно-бесконечно больше чем предполагалось. Не уверен на сколько можно реально понимать глубину взаимодействия всех процессов когда выполняется всего лишь один шаг. И насколько возможно понимать работу всего сервера и клиента в целом, удерживая такие потоки бесконечной информации в (своей) голове..!?

По мимо пинг понг процессов с миллионом итераций в переборе всех слоев, миллиардов проверок валидности, не в воде, не в воздухе, не на корабле, не в стене, не в дверях, не где то еще., защитных проверок от пакетхаков, читов, дюпов, болтов, и шурупов., сенд ресив хекс пакетов клиент сервер хуков, антиперегруз тридпул треш санитайзер макетов, с автоочисткой бинарных котлетов.
И Че-то ещеееее????))

Вопрос в том, как бы так сократить эти избыточные процессы и оптимизировать код, чтобы получить максимальную производительность.

Какие методы критически важны, какие нужно оставить для загрузки геоблоков и проверки слоев, а от каких лучше бы отказаться и или переписать?
Я заметил что одни и те же методы используются как для загрузки так и для CanSee так и для CanMove.

Еще вопрос по Path. Стоит ли создавать узлы Pathnode, или лучше генерировать маршруты на лету?

ClickHandler - или какая система должна быть для того чтобы сервер различал потолок стены и пол при клике в соответствующий пиксель?

Еще много вопросов) чем дальше тем их больше…
 
Не стоит недооценивать мощность современных CPU. В большинстве случаев, если не требуется какие-то сложные IO-вызовы или аллокации памяти для объектов, итерации тысяч объектов в циклах - это не миллисекунды, а наносекунды. У современных процессоров огромная вычислительная мощность приближающаяся к триллионам операций в секунду.
Вот как раз из этой мощности вытекает проблема любой доступной для свободного скачивания сборки L2, которая заключается в том, что ее разработкой на разных этапах занимались люди, чаще всего бесконечно далекие от понимания того, как работает написанный и "улучшаемый" ими код, от принципов многопоточного программирования, написания высоконагруженных сервисов, да и даже не понимающих того, как вообще устроена структуру проекта и как там взаимосвязаны внутренние процессы.
Отсюда бесконечные состояния гонки у важнейших переменных, регулярные утечки памяти почти во всех сервисах, ботлнеки на бестолково синхронизированных участках кода, выполнение IO в сетевых потоках(или еще хуже в EventLoop), голодание потоков или наоборот забитые очереди пулов, когда 90% полезной нагрузки CPU тратится на добавление и сортировку задач в DelayedQueue внутри шедулера, просто кучи бестолкового говнокода, с десятками гигабайтами young объектов в секунду, когда GC задыхается в паузах по 5-10 секунд на онлайне в 300 человек и так далее и тому подобное.

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

К сожалению, MMORPG сервер - не самый удобный подопытный для профилирования, т.к большинство проблем проявляются прежде всего на высоких нагрузках, которые практически невозможно сымитировать в условиях локального запуска. Поэтому, когда приходит понимание, что код который неплохо работал на 50 игроках, внезапно умирает на 500, и почему-то скейлится квадратично, а не линейно на рост онлайна, как правило уже слишком дорого переписывать все то легаси-говно, которое накопилось за двадцатилетнюю историю L2j-дева.

А насчет переписывания и оптимизации кода комплексно - забейте. Если вы задаете такие вопросы, то вашей компетенции 100% будет недостаточно, чтобы системно поправить все эти проблемы. Вы только пополните ряды тех, кто пытался сделать это до вас и только увеличите энтропию.

Тем не менее, если вы хотите попробовать - вооружайтесь профайлером и исправляйте для начала хотя бы самые ярковыраженные проблемы в отдельных механизмах.
Например, если пользуетесь IDEA, в ней есть неплохой встроенный профайлер. Также рекомендую VisualVM с сэмплером, который позволяет делать снапшоты объектов, анализировать дельту их количества, а также наиболее "горячие" методы.
Запускайте профайлер, имитируйте нагрузку. Смотрите, какие методы и строки в коде занимают больше всего CPU-времени, создают мусор. После этого, можете обращаться за помощью к нейронкам, с просьбой объяснить причины такого поведения кода и возможные пути исправления. Современные модели с лихвой покроют этот кейс. Чаще всего, в процессе профилирования приходит понимание, что действительность сильно отличается от представлений и проблемы совершенно не в тех местах, о которых вы могли подумать вначале. Какая-то строчка кода может вызываться миллионы раз в секунду, но тратить суммарно на эти миллионы вызовов - десяток микросекунд, а какой-то вызов может быть брошен десять раз за весь лайфтайм проекта, но порождать лаги по полсекунды. Начните с малого, просто побегав десять минут под профайлером и изучив результат. Геодвиг - как раз один из тех, немногих механизмов, поведение которого можно профилировать локально, просто заставив бегать десяток тысяч мобов рандомно по локам.
 
Последнее редактирование:
 

Вложения

  • 160e6dcf-fb17-4902-90ea-302176f7e65c.webp
    573,3 КБ · Просмотры: 18
  • 48974ac2-86fb-4e55-bec1-b6aafccc94f5.webp
    469,3 КБ · Просмотры: 19
  • DALL·E 2025-03-22 06.05.42 - A conceptual illustration of how code works inside a computer. T...webp
    556,8 КБ · Просмотры: 18
  • DALL·E 2025-03-22 06.05.59 - A conceptual illustration of chaos inside a computer. Instead of...webp
    624 КБ · Просмотры: 19
Какие-то мескалиновые рофлы, у вас)
 
Давайте возьмем систему (или под-систему) сервера и будем обсуждать что и как вам хочеться оптимизировать. Проблема не в том что-бы что-то найти, а именно найти то что будет полезно (например раньше такого не было, но онo поможет) и самое главное как будет полезно (полезность нужно измерить в сравнении, например потребление памяти, или производительность). Много чего можно поменять в тех же самых серверах на Яве, но хочеться напомнить что не все поймут зачем.

Вам уже написали что все, здавайтесь и не надо лишних телодвижений. Я конечно не вижу зачем, но возможно потому что у меня свой проект. Берите сборку и ковыряйтесь. Но смысл то в том что для того что-бы что-либо оптимизировать нужнo понять как и код уже работает, так и другие совместимые системы сервера живут с друг-другом. Для понимания этого нужно время и готовность к ковырянию всего сервера. Ну можно также после этого много читать о том что было изобретено за последние 20 лет и начинать применять в Ява коде (у ниx там застой с 90-х, я серьезно, пока ничего нового я не нашел). Так что вперед!
 
Я просто нахожу в этом свободу от обстоятельств. И путь к познанию Сакрально-Божественного, Трансцендентального, Вечного. Вне форм и времени. На волне частот и вибраций.
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…