Сегодня мой друг сказал мне, что программы Go могут масштабироваться на нескольких ядрах процессора. Я был очень удивлен, услышав, что, зная, что системные планировщики задач ничего не знают о goroutines и, следовательно, не могут запускать их на нескольких ядрах.Голанг, процессы и общая память
Я сделал поиск и выяснил, что программы Go могут запускать несколько задач ОС для их запуска на разных ядрах (число контролируется переменной среды GOMAXPROCS). Но, насколько я знаю, процесс форсинга приводит к полной копии данных процесса и различным процессам, выполняемым в разных адресных пространствах.
А как насчет глобальных переменных в программах Go? Безопасны ли они для использования с несколькими goroutines? Как-то они синхронизируются между системными процессами? И если они это сделают, то как? Я в основном обеспокоен реализацией linux и freebsd.
[Официальная документация на goroutines] (https://golang.org/doc/effective_go.html#goroutines) должна быть полезна. – chrk
Как и [эта статья] (https://www.goinggo.net/2014/01/concurrency-goroutines-and-gomaxprocs.html). – chrk
@chrk, проблема в том, что официальная документация или вторая статья не проливают свет на то, как запустить runtime обеспечивает синхронизацию общих переменных. В официальной документации говорится: «Горотин имеет простую модель: это функция, выполняемая одновременно с другими goroutines в одном и том же адресном пространстве». Но они не могут находиться в одном и том же адресном пространстве, если они находятся в разных процессах ... – ea7ababe