LINUX.ORG.RU

Какой нынче перформанс в Джаве по киданию экспешенов на сервер-сайде?

 ,


0

3

Вот скажем пилим мы сервер-сайд, куча эксепшенов - все дела. Если то же число не распарсилось или поле с формы в паттерн не зашло. Казалось бы красота, перехватываем ошибки в другом слое.

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

Так-то ерунда, но мой перфекционизм, дурной голове покоя не даёт )

★★★★★

Последнее исправление: foror (всего исправлений: 2)

Ответ на: комментарий от dsxl

Вместо if-else/match надо использовать map/flatMap/fold, и всё будет путём.

BattleCoder ★★★★★
()
Ответ на: комментарий от vertexua

Примеры

Здесь обработка ошибок слишком уж примитивная и слоёв мало. Исключения хороши, когда есть 100500 слоёв абстракции и обработка ошибок в каждом из них не нужна, но сами исключения при этом могут быть достаточно сложными.

asaw ★★★★★
()

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

dzidzitop ★★
()
Ответ на: комментарий от Jefail

Да-да, он сказал это и глотнул смузи.
Если ты предпочитаешь «читабельность» в ущерб производительности, то в итоге не имеешь ни читабельности ни производительности.

dzidzitop ★★
()

Я в прошлом году работал в компании, которая делает сравнительно приличный хайлод (реклама/RTB), была как раз такая ситуация - парсили что-то вроде юзер-агента/ip/etc, и там был try-catch вроде try {input.toIp} catch IllegalFormat(err) => "", и были жуткие проблемы с GC. Когда это заменили на код, который не бросал, ситуация вроде улучшилась, но я на этот момент уже ливнул оттуда, и не знаю, чем закончилось. Но на всякий случай теперь в коде не бросаю, а возвращаю Either/Option/Validated etc.

inb4 дефолтная ссылка https://shipilev.net/blog/2014/exceptional-performance/

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Там это было критично из-за того, что эта херня случалась чуть ли не на 80% клиентов (версионирование апи, кококо), и оно прямо влияло-влияло.

cdshines ★★★★★
()
Ответ на: комментарий от dsxl

один try/catch

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

// починил во имя справедливости

cdshines ★★★★★
()
Последнее исправление: cdshines (всего исправлений: 1)
Ответ на: комментарий от dzidzitop

Поддерживаю этого дзидзитопа.

https://www.youtube.com/watch?v=kjCxpP12hHQ

Автор велосипеда новой, более лучшей фьючи для jvm из твиттера 25 минут демонстрирует, что когда припекает, вся читабельность коту под хвост.

cdshines ★★★★★
()
Ответ на: комментарий от Jefail

Все говорят «докинуть железа», но на деле, когда ты говоришь «пацаны, у меня там эксепшены, давайте еще зарезервируем пару инстансов на год вперед», на тебя смотрят, как на идиота, и говорят: «мамку твою резервировал, пиши нормальный код, балбес».

cdshines ★★★★★
()
Ответ на: комментарий от DiKeert

да, сейчас ты проснешься, и вокруг будут тысячи комментов «джава тормозит»)

stevejobs ★★★★☆
()
Ответ на: комментарий от vertexua

Since:
JDK1.0

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

как бы ты назвал новые методы? Например, pop, возвращающий Optional, при условии что pop уже занят

stevejobs ★★★★☆
()
Ответ на: комментарий от cdshines

Не надо передёргивать. Все исключения обрабатываются всегда, остаётся только написать прямую как стрела бизнес логику (вместо прокидывания ошибок просто кидаются исключения)

А если у вас миллионы исключений в секунду, то никакие это не исключения уже, а рядовая ситуация. И обрабатывать нужно как часть бизнес-логики. Всё в порядке вещей ящитаю™.

dsxl
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.