Как я рассказывал в первой части, реализация работы с памятью - довольно непростое занятие, и в первой части я рассказывал про сравнительно лёгкую область этой работы.Пока процесс однопоточный, сборщик мусора имеет дело с одним стеком, одним набором регистров и одной точкой выполнения. Как только появляется второй поток, он уже может одновременно менять кучу на другом процессорном ядре. А после появления горутин выполнение Go-кода вообще перестаёт быть жёстко связано с одним стеком нативного по…
Импорт Excel-файлов обычно выглядит несложной задачей. Получили XLSX, прочитали строки, проверили обязательные поля и записали данные в PostgreSQL. Если запись существует, обновили её через ON CONFLICT DO UPDATE.Для одноразового скрипта этого часто достаточно. Проблемы начинаются, когда импорт становится частью продукта.Допустим, в SaaS есть справочник товаров, который клиенты периодически обновляют из Excel. В одном файле 30 тысяч позиций, в другом 100 тысяч. Пользователь загружает новую верси…
В первой статье про GoOS я довольно подробно прошёлся по загрузке, SMP, IPC, capabilities, сети, Linux ABI и устройству сервисов. А в комментариях довольно быстро всплыл вопрос, который я тогда сознательно обошёл стороной: что в системе происходит с динамической памятью и сборщиком мусора.Вопрос этот был вполне по делу. Я пишу ОС преимущественно на Go, компилирую её TinyGo, но обычный Go runtime мне тут никто не выдаёт. Значит, фраза «Go сам разберётся с памятью» тут не работает от слова «совсе…
О чём статьяНедавно я познакомился с golang и в качестве практики решил реализовать алгоритмы rate limiting'а из статьи c arxiv. В этой статье мы рассмотрим написание rate-limiter'а в виде отдельно стоящего сервиса и в виде middleware, используя in-memory кэш или Redis, добавим поддержку REST и gRPC, подключим Prometheus и поймём как добиться атомарности операций с минимальными задержками. Кому полезноНовичкам в golang или же людям, которые по какой-то причине также решили использовать…
Привет. В этой статье я расскажу какие бывают паттерны отказоустойчивости. Всего их 6, но я расскажу про 4 вида: Retry, Deadline, Rate Limiter, Circuit Breaker. Начнем по порядку.RetryСначала скажу, что сеть максимальна не стабильна и полагаться на успешные операции не вариант. При выполнении какого либо запроса, может быть сетевая ошибка, обрыв, дроп пакета, недоступность ресурса. Чаще всего такие проблемы можно решить обычным повтором запроса.Но повторять нельзя вслепую. Если операция не идем…
Недавно я был на хардкорной конференции про облачные технологии и ИИ. Но не в качестве спикера или гостя, а в качестве технического интервьюера: проводил короткие собеседования с Go-разработчиками для наших команд.Мы наивно рассчитывали, что к нам выстроится очередь, но к рекрутерам за весь день подошли всего два Go-шника. Конечно, приятно думать, что доклады были настолько интересными, что никто не хотел их пропускать. Но вообще я задумался: почему так получилось?Отсюда вопрос к вам, Go-разраб…
Привет, Хабр.Мне нужно было открыть страницу и увидеть, что происходит на удалённых серверах: нагрузка, процессы, диски, логи. Всё, что я находил, делилось на два лагеря. В первом система, под которую поднимаешь несколько сервисов и потом живёшь с их конфигами. Во втором простая штука, которая выглядит как из прошлого десятилетия и под себя почти не настраивается. Красивого, простого и гибкого одновременно я не нашёл. Мне это надоело, и я написал своё.Получился Pulse: мониторинг Linux- и Window…
«П‑с‑с‑с, хочешь, чтобы функция очистки массива была на 49% быстрее? Сдвинь массив на 4 байта».Рассмотрим следующий код на Go:const words = 1 << 19 type block struct { n uint32 data [words]uint32 } func (b *block) reset() { b.data = [words]uint32{} } Что, если я скажу вам, что всего лишь добавив 4 байта заполнения (padding) между n и data, вы ускорите функцию reset на 49% (по крайней мере, на машинах с Intel)? Звучит безумно?Давайте проведём бенчмарк. Даже попробуем разные заполни…
Всем привет!Сделал для себя небольшой инструмент, который позволяет добавлять сессии клода в избранное. Решил поделиться, может кому‑нибудь тоже пригодится.У меня бывают сессии, которые нужно продолжить через какое‑то время, например:изучение инструмента или новой для меня темызадача, завершение которой откладывается по каким‑то причинам. Чтобы потом не запускать новую сессию, удобнее вернуться в ту же, где контекст уже есть.Команда /resume мне не очень подходит, потому что она показывает все с…