Новости

Post Thumbnail

SIMD в go

Будущее пришло быстрее, чем ожидалось: в go1.27rc2 пакет simd стал портируемым, и один Go-код разворачивается в Neon на Apple Silicon и в AVX2 на Intel. Это наборы векторных инструкций двух процессорных миров, ликбез по ним как раз в этой статье. Автор про...

Post Thumbnail

Swiss Tables

Статья подробно разбирает переход Go 1.24 от классической bucket-архитектуры мап к Swiss Tables - дизайну, позаимствованному из Abseil, который заменяет цепочки оверфлоу-указателей на плоское открытое адресование с компактными контрольными байтами и групповым ...

Post Thumbnail

Визуализируем GC

Статья наглядно исследует новый сборщик мусора Green Tea в Go 1.25/1.26. Автор пишет визуализатор кучи, показывающий, как Go размещает объекты одного размерного класса рядом друг с другом и сравнивает его с C#. Он отмечает, что в отличие от C#, Go никогда ...

Post Thumbnail

Хранение паскеев

Автор предлагает формат для паскеев специальный формат. Что-то похожее на интероперабельную, непрозрачную строку для хранения паскей-записей, по аналогии с PHC-строками для паролей. Зачем это нужно? Приложения смогут обращаться с паскеями как с хешами паро...

Post Thumbnail

Арены жалко

Go отказался от экспериментальных Memory Arenas - механизма, позволявшего выделять память крупными пулами в обход GC для снижения накладных расходов в высоконагруженных сценариях. Автор считает это стратегической ошибкой. Формальной причиной стали проблемы ...

Post Thumbnail

687 ГБ аллокаций

Автор профилировал свою многопоточную реализацию Redis на Go и обнаружил, что одна строка кода `s.kvList[k] = append(v[popped:], s.kvList[k]...)` за время бенчмарка суммарно аллоцировала 687 ГБ памяти. Реально приложение держало в памяти лишь около 4,58 МБ. В ...

Post Thumbnail

HTMX с Go

Автор детально описывает свои паттерны интеграции HTMX с Go. Почитайте, там много всего интересного. Но мне весь это веб всё еще не нравится. Любой HTML - это в первую очередь ебля со стилями. Я хотел бы, чтобы уже сделали как во Flutter или Qt, чтобы было ...

Post Thumbnail

Убираем ограничения

Автор разбирает продвинутый прием устранения проверки границ в горячих путях Go Когда компилятор не может доказать безопасность доступа к срезу, а программист может, на помощь приходит unsafe.Pointer с арифметикой указателей. Вместо `binary.LittleEndian.Uin...

Post Thumbnail

OpenTelemetry в комптайме

Разрабы OpenTelemetry объявили о первом стабильном релизе Go Compile-Time Instrumentation (v1) Новый инструмента otelc, который встраивает телеметрию в Go-бинарник на этапе компиляции через механизм -toolexec, без правок исходного кода и без отдельного кода...

Post Thumbnail

Объединение запросов

Статья объясняет технику объединения запросов на Go с помощью пакета singleflight для борьбы с проблемой "громового стада". Когда после истечения популярного ключа в кэше сотни одновременных запросов промахиваются и каждый выполняет собственный идентичный запр...

Post Thumbnail

mmap или pread

Автор статьи - инженер из VictoriaMetrics. На примере реального движка хранения VictoriaLogs разбирает выбор между системным вызовом pread и отображением файла в память mmap при чтении байтов из файлов. Автор объясняет, что pread имеет заметную цену: каждый...

Post Thumbnail

TypeScript переписали на Go

Команда Microsoft с помощью AI переписала компилятор TypeScript 7.0 на Go, а не на Rust (шах и мат!). Команда добилась примерно десятикратного ускорения сборки, и автор использует это как повод доказать, что Go - оптимальный язык для эпохи агентной разработки ...

Post Thumbnail

На 49% быстрее из-за выравнивания

Разбор неожиданной оптимизации в Go: сдвиг массива на 4 байта через добавление padding-поля ускоряет операцию обнуления на 49% на Intel и на 9% на AMD. Обнуляция - это что-то типо b.data = [words]uint32{} Но почему так происходит? Компилятор генерирует инст...

Post Thumbnail

Активация сокетов

Автор рассказывает, как с помощью сокет-активации systemd запускать Go-сервис только когда в него реально приходит запрос, чтобы не тратить память и CPU. systemd сам открывает и слушает сокет на нужном порту, а при первом подключении запускает сервер, пере...

Post Thumbnail

Джину уже 12 лет

Ману Мартинес-Алмейда рассказывает историю как он создавал Gin - одного из самых популярных веб-фреймворков для Go, который вырос из его несостоявшегося стартапа Fyve и разрабатывался по принципу "простое важнее легкого". Вдохновившись выступлением Роба Па...

Post Thumbnail

zero-copy-оптимизации

Разбор zero-copy-оптимизаций в Go. Когда вы передаете `*os.File` напрямую `в io.Copy(conn, f)`, рантайм распознает это через цепочку type-assertions и вызывает `sendfile(2)`, передавая данные из кеша странички в сокет без копирования в юзерспейсе. Но вот к...

Post Thumbnail

WAL-RUS

ClickHouse Cloud переписали утилиту для бэкапов и WAL-архивирования Postgres с Go на Rust. В результате появился WAL-RUS - опенсорсный инструмент, у которого пиковое потребление виртуальной памяти более чем на 70% ниже, чем у WAL-G. Это достигнуто за счет прям...

Post Thumbnail

Профилирование

Статья разбирает пять встроенных профилировщиков в Go (CPU, heap, block, mutex и goroutine), показывая, что все они собирают данные в единый pprof-формат, но отличаются способом записи. CPU-профайлер работает асинхронно через сигналы ОС и кольцевой буфер. Heap...

Post Thumbnail

6 популярных кешей

Автор сравнивает шесть подходов к реализации потокобезопасного in-memory кеша в Go. От наивного map без блокировок до copy-on-write через atomic.Pointer и все это на своем на 20-ядерном i7-14700K под разными нагрузками - read-only, read-heavy, write-heavy. ...

Post Thumbnail

Детектор утечек горутин

В Go 1.27 в runtime/pprof добавляется встроенный детектор утечек горутин, принятый из предложения Uber. В отличие от uber-go/goleak, который работает только в тестах и дает ложные срабатывания на живом сервере, новый профиль goroutineleak через сборщик мусо...