Выбор ответа Senior Горутины и планировщик GMP обновлено
Как растёт стек горутины
Вопрос
Как устроен стек горутины в современном Go?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Маленький непрерывный стек; при нехватке копируется в вдвое больший. Начальный стек горутины около 2 КБ.
Варианты ответа
- Фиксированный стек 1 МБ, как у потока ОС, без роста
- Маленький непрерывный стек; при нехватке копируется в вдвое большийправильный ответ
- Сегментированный стек: новые куски по 8 КБ цепляются связным списком
- Стека нет вообще: все локальные переменные лежат в куче
Разбор
Начальный стек горутины около 2 КБ. Пролог функции проверяет, хватает ли места, и если нет, рантайм выделяет стек в 2 раза больше и копирует старый, корректируя указатели на стек (это возможно, потому что компилятор знает, где они). При GC слишком большой стек может сжаться. Сегментированные стеки были до Go 1.4 и давали «hot split». Фиксированный мегабайтный стек был бы слишком дорог для миллиона горутин.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.