Основы синтаксиса Строки и руны Массивы и слайсы Map Структуры и методы Интерфейсы Горутины и конкурентность Каналы defer, panic, recover Обработка ошибок Указатели Пакет sync Тестирование Пакеты и модули Стандартная библиотека Context Generics iota и перечисления Разное / продвинутое

Горутины и конкурентность

7 вопросов

Горутины - легковесные потоки, управляемые рантаймом Go. Конкурентность - ключевая сила языка. Важно понимать data race, GOMAXPROCS и утечки горутин.

1 Что такое горутина? 🟢 Лёгкий
Ответ: B) Лёгкий поток, управляемый рантаймом Go

Горутина - не поток ОС, а легковесный «зелёный поток», управляемый планировщиком Go. Начальный стек ~2 КБ (у потока ОС ~1 МБ). Можно запустить тысячи горутин. Рантайм мультиплексирует горутины на потоки ОС.

Подробнее →
2 Как запустить функцию в горутине? 🟢 Лёгкий
Ответ: B) go f()

Ключевое слово go запускает функцию в новой горутине. Вызов не блокирует - управление сразу возвращается. Работает с любыми функциями и методами, включая анонимные: go func() { ... }().

Подробнее →
3 Что произойдёт, если main() завершится до горутин? 🟡 Средний
Ответ: B) Программа завершится, горутины остановятся

Когда main() возвращается, процесс завершается - все горутины убиваются. Они не получают сигнала. Для ожидания горутин используйте sync.WaitGroup, каналы или context.

Подробнее →
4 Что такое data race? 🟡 Средний
Ответ: B) Одновременный доступ к памяти без синхронизации

Data race - когда две или более горутины одновременно обращаются к одной переменной и хотя бы одна из них пишет. Результат непредсказуем. Решения: мьютексы, каналы, атомарные операции.

Подробнее →
5 Какой флаг go test обнаруживает data race? 🟡 Средний
Ответ: B) -race

go test -race или go run -race включает детектор гонок. Он замедляет программу, но находит data race во время выполнения. Рекомендуется использовать в CI/CD.

Подробнее →
6 Что такое GOMAXPROCS? 🟡 Средний
Ответ: B) Максимум потоков ОС для параллелизма

GOMAXPROCS определяет, сколько потоков ОС одновременно выполняют Go-код. По умолчанию равен количеству CPU. Это не лимит горутин - горутин может быть гораздо больше.

Подробнее →
7 Что произойдёт при утечке горутины? 🟡 Средний
Ответ: B) Горутина останется в памяти навсегда

Go не имеет механизма принудительного завершения горутин. Если горутина заблокирована (ждёт канал, мьютекс), она останется в памяти до завершения программы. GC не собирает горутины. Используйте context с отменой.

Подробнее →