Вопрос такой: почему рантайм устроен именно так, а не иначе. Релизноты-то можно вычитать, там все написано. А на "почему" в них ответа нет вообще.
Единственный способ, который у меня сработал: поставить рядом proc.c времен Go 1.0 и proc.go 2026-го и читать их как две редакции одной книги.
Что видно, когда листаешь подряд:
2009, одна очередь под одним замком и
GOMAXPROCS=1 по умолчанию, с честным комментарием авторов, что цель сейчас просто чтобы хоть что-то работало1.1, схема GMP, локальные очереди, воровство работы
1.2, горутину стало можно прервать, хаком поверх проверки стека
1.3 и 1.4, стеки научились переезжать по памяти и ужались до 2 КБ
1.14, вытеснение сигналом SIGURG
1.25,
GOMAXPROCS сам читает лимит cgroup1.26, рантайм научился замечать утекшие горутины
А теперь то, ради чего я это все и затевал. Семантика двух символов
go f() не менялась с 2009 года ни разу. Внутренности под ней переписали трижды, включая полный переезд рантайма с C на Go, и ни одна программа от этого не сломалась.Обычно "обратная совместимость" звучит как оправдание для легаси. Здесь наоборот: интерфейс зафиксировали так удачно, что под ним можно было переделать вообще все.
Хоть и с запозданием в три дня, но финальная третья часть статьи готова!
https://habr.com/ru/articles/1077498/
