⚙️ Переезд стека: как Go прячет свою магию
⚙️ Переезд стека: как Go прячет свою магию Читал сегодня разбор рантайма Go и словил дежавю: лет пять назад на стартапе поймал падение, которое никто не мог объяснить, — ответ лежал как раз в этой статье. Стек горутины (лёгкого потока Go) — не статичный кусок памяти. Рекурсия выросла — стек переезжает целиком в блок побольше, и рантайм вручную «чинит» все указатели, что указывали на старое место. Сохранил адрес переменной как простое число — после переезда оно устарело. Классическая грабля с код-ревью. А ещё до Go 1.14 цикл без единого вызова функции было не прервать: планировщик просил — горутина не слышала. Починили красиво: рантайм шлёт потоку специальный сигнал ОС и подделывает контекст так, будто код сам вызвал функцию. Поток просыпается — и спокойно заходит в планировщик. Тысячи горутин на сервере, и под каждой такая механика. Люблю, когда за «просто работает» столько инженерии. Какая схема вам кажется честнее: попросить или заставить? Пишите в комментах. #Go #код #разбор