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

Эффективность на максимум: Микрооптимизации в Golang

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров6.8K
Всего голосов 28: ↑13 и ↓15+3
Комментарии11

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

Конкатенация строк.
Примеры простые и тут хорошо видно кто выигрывает)

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz
BenchmarkConcatOperator-4  62212492  19.09 ns/op  0 B/op   0 allocs/op
BenchmarkSprintf-4         6850207   172.6 ns/op  48 B/op  3 allocs/op
BenchmarkStringBuilder-4   19044630  53.52 ns/op  24 B/op  2 allocs/op

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

и я про то. Статья больше в заблуждение вводит

Ну так а микрооптимизации где? Про что статья?)

Каждая миллисекунда имеет значение, микрооптимизация это must have, особенно на языке Go.

Серьезно, б..... Как только вы обращаетесь хоть к одному внешнему сервису, по сети, а вы будете это делать, иначе у вас сферический конь в вакууме, забудьте слово "микрооптимизации".

Убрать из названия статьи слова про микрооптимизации и текст будет неплох для новичков.

А как же складывать строки байтами через unsafe?

Коротко об этой статье: галопом по Европам. Про память очень скудно: сказали про значения и указатели, но ни слова о stack, heap и escape analysis, а стоило, потому что ключевая разница в производительности заключается именно в том, в какой области памяти будет выделено значение. Не сказано, в каких случаях escape analysis может НЕ выделить память в heap для значения доступного по указателю, когда копирование значения быстрее, а когда медленнее чем аллокация.

Про строки вообще тихий ужас: пример противоречит заявленному. strings.Builder совсем не самый быстрый в данном примере, потому что конкатенируются два литерала и компилятор Go абсолютно логично делает это во время компиляции, от чего конкатенация оказалась самым быстрым вариантом, хотя на практике это вовсе не так.

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

На мой взгляд, заголовок статьи вводит в заблуждение. Речь в ней почти не идет о микрооптимизациях кода. Большая часть текста посвящена Go и его общему устройству.

Хороший язык на "го" не назовут.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий