Но ведь по умолчанию там действительно пул тредов под капотом равный кол-ву ядер. А один тред будет, если уже руками выкрутить GOMAXPROCS
в 1
.
И синхронизация там на тех же каналах - честная, мультитредная. Если бы был всего один тред - мьютексы/атомики там были бы не нужны.
Треды конечно есть, но шедулер не работает с тред пулом и вообще такого понятия в шедулере нет. Есть логический процессор (P - в терминологии го), которые держит контекст. С ним по-умолчанию связан один OS thread (M). M обрабатывает локальную и глобальную очередь которую пополняет P воруя G у других P. Aka work stealing model. GOMAXPROCS как раз регулирует количество P и максимальное кол-во тредов выполняемых одновременно (spinning threads), а самих тредов может быть больше.