3.2Kпросмотров
6 декабря 2025 г.
Score: 3.5K
Concurrency, Synchronization and Consistency. Пост №18. Golang sync.Mutex internals В прошлом посте мы решали практическую задачку и использовали язык Go. Его основная особенность - наличие собственного рантайма в рамках которого происходит управление и планирование горутин - потоков исполнения не связанных явно 1к1 с потоками ОС. А если у языка собственный рантайм и "собственные" потоки, то и должны быть "собственные" примитивы синхронизации, умеющие работать с горутинами. И они действительно есть. Основным примитивом синхронизации в Go является sync.Mutex. У ребят из VictoriaMetrics получился великолепный разбор внутреннего устройства sync.Mutex c красивыми иллюстрациями и кодом. Я бы не смог рассказать лучше, а пересказывать копируя материал не хочется. Тем более, что многие приемы и детали упоминал ранее, только в контексте POSIX. Поэтому советую освежить в памяти предыдущие посты цикла. Увидите, что многие идеи и оптимизации придуманные для ОС были использованы в рантайме Go. Уровень абстракции выше, а проблемы и вызовы такие же😊 Внутри вас ждёт:
- Внутреннее представление sync.Mutex.
- Как выглядят Fast path и Slow path в sync.Mutex (в том числе в ассемблере).
- Как sync.Mutex пытается обеспечить справедливость и избегать голодания.
- Как происходит Unlock. https://victoriametrics.com/blog/go-sync-mutex/ ----- Если вам понравился пост, поддержите его реакциями и комментариями. Мне важно увидеть вашу обратную связь. Спасибо! P.S. Следующая публикация вероятнее всего будет на Хабре, выпуск намечен на следующую неделю. Будем как в прошлый раз писать свои велосипеды в погоне за эталонными реализациями, оценивать результаты бенчмарками и профилями😊