Как стать автором
Обновить

Комментарии 36

Ставь лайк если тоже пустил скупую мужскую слезу гордости за родной язык

Что бросается в глаза на blank-go:


  • стандартный http сервер;
  • стандартная работа с json.

Поэтому такие низкие результаты.

НЛО прилетело и опубликовало эту надпись здесь

Есть еще такая прелесть без потребности в генераторах кода https://github.com/json-iterator/go

подтвержу, на реальном проекте так и було. Не 50 конечно, но 25-35 выдавали.

Интересно было бы посмотреть на графики потребления cpu\ram во время тестирования, и на результаты с прогреввом java версии. В любом случаи спасибо!

1. Как можно тестировать производительность, если у вас на каждый чих стоит println?
2. Зачем каждый раз открывать/закрывать подключение к бд? Еще и формировать строку подключения тоже каждый раз.
И пара вопросов по коду:
1. В джаве return client; вернет json?
2. В чем заклоючалась нестабильность? Кто и какие ошибки выдавал?
И еще момент:
в го у вас:
db.SetMaxOpenConns(20) // Sane default
db.SetMaxIdleConns(0)
db.SetConnMaxLifetime(time.Nanosecond)
зачем это?
И покажите такое в джаве, а то я не нашел.
Подтверждаю, в Java каждый раз создается новое подключение, никаких пулов соединений.

коммент не о том. в го тоже новое подключение на реквест.

потестили как быстро pg открывает коннект, поздравляю

Интересно сравнение с ванильным NodeJs. Не планируете добавить?
я использовал самые новые
Bank-go: Go 1.8
есть же нормальные бенчмарки, зачем такое странное сравнение?

Не верю. Был бы свободный день и Go приложение заработало бы в 5-10 раз быстрее как миниму.


Должно быть стыдно делать такие тесты и уж тем более выкладывать как статьи.

А теперь выложите сюда pprof с go и вполне может оказаться, что ботлнек — это работа с базой.
Алсо, для нагрузочного тестирования есть православные ab / siege.
Elixir вроде как очень хорош в плане нагрузки, его не рассматривали?
Мне кажется, что не выиграет. Хотя интересно было бы потестировать. По моему опыту, Elixir больше про стабильность, а не про производительность.

Можно конечно узкие места подправить, скажем нативная JSON либа (jiffy) будет раз в пять быстрее стоковой либы. Если в день через приложение проходят миллионы запросов, разница может оказаться ощутимой.
Of course, I'd also suggest that whoever was the genius who thought it was a good idea to read things create ONE F*CKING BYTE CONNECTION AT A TIME PER REQUEST with system calls TCP handshakes for each byte request should be retroactively aborted. Who the f*ck does idiotic things like that? How did they noty die as babies, considering that they were likely too stupid to find a tit to suck on?

Linus.

Original
Жаль, что, скорее всего, больше такого в LKML (или где-либо ещё) не увидишь. Остаётся только перечитывать старенькое и пускать скупую ностальгическую слезу :) Это же просто бесценно.

Вот вам бенчмарки
Только Java и Go. Разные фреймворки/библиотеки. Там ещё можно попереключать тип приложения и тачки.

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


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


А по сути, тут даже комментировать нечего.

волновало почему именно такие результаты?
Совершенно правильный камент.
Что очень удивляет, так это дикая разница, особенно на первых шагах (почти в 6 раз!).
Хотя, по сути, здесь нечем тестировать сами языки, т.к. никакой обработки данных в самих ЯП не происходит. Только простейщий прием параметров и отправка сырого запроса в базу. Разница в конкретном тесте должна быть минимальна.
Автор же нагородил целый огород из горилл и джейсонов, что в данном тесте просто съест львиную долю ресурсов, а все должно просто упереться в систему ввода-вывода и в базу.
Сами ЯП тут толком и не тестируются.
Как правило такие тесты провести довольно трудно, нужно очень хорошо разбираться в обеих языках. Если же нет то и результат будет плачевным. Да и смысла этой статьи не вижу, подобных пруд пруди, да и с более правильными тестами. А так holy war на ровном месте.
Очередной пост, в котором чувак, не разобравшийся нормально в технологии, пытается что то сравнивать
Имея опыт написания роутера для Go могу сказать совершенно точно, что роутер Гориллы по производительности совсем не айс, смысл брать его в бенчмарк не вижу вообще
image
Вы бы показали код на GO человеку, умеющиму писать на GO.
Зачем на каждый чих вызывать newDb()?
DB.Close
It is rare to Close a DB, as the DB handle is meant to be long-lived and shared between many goroutines.
Вы бы и в джаве тогда BankPostgresRepository сконфигурили бы как per call.
Вы бы и в джаве тогда BankPostgresRepository сконфигурили бы как per call.

так и сконфигурен)

А разве спринг по дефолту не синглтоны делает?

Я вижу сервис и репозиторий — в них происходит инициализация на реквест.

Bank-java: Java 11, spring boot 2.0.4, spring-web 5.0.8, PostgreSQL JDBC 4.2.4

О боже! В этом мире еще остались люди, которые не пишут на Spring Boot и не ассоциируют его со словом Java?

Сравнивать Go, который создан для разработки высокопроизводительных сетевых приложений, с Spring Boot, который создан для быстрой разработки — это по меньшей мере странно. Равноценное сравнение было бы с Netty после компиляции приложения в бинарник.
… и Netty будет работать примерно на 2 порядка быстрее.
Думаю, в реальных сценариях со сборкой мусора будет только в 1,5-2 раза быстрее, чем лучший GO.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации