Насколько я понимаю, GC (Сборка мусора) обрабатывается виртуальной машиной.
В случае типичной виртуальной машины, поддерживающей язык программирования с поддержкой GC, (скомпилированная форма)программа, написанная на этом языке, буквально управляется виртуальной машиной: виртуальная машина выполняет код программы и периодически вмешивается для выполнения задач GC.
Важным моментом является то, что каждая программа, работающая на такой виртуальной машине, может учитыватьее виртуальная машина как часть ее среды выполнения.
Еще один важный момент заключается в том, что такая виртуальная машина представляет собой так называемую систему времени выполнения для так называемой модели исполнения изэтот язык программирования.
В этом случае, если приложение работает независимо без такой среды выполнения, как обрабатывается GC?
Совершенно похоже на случай с виртуальной машиной.
Каждая программа Go, скомпилированная стандартной инструментальной цепочкой (которую можно загрузить с официального сайта , содержит Среда выполнения Go , связанная сith сама программа. Каждая скомпилированная программа Go создается таким образом, что при запуске программы точка входа программы сначала выполняет среду выполнения, которая отвечает за инициализацию себя, а затем программу, и как только она завершаетсявыполнение передается в main()
.
программы. Помимо прочего, инициализированная среда выполнения Go непрерывно запускает один или несколько собственных фрагментов кода, который включает планировщик goroutine и GC (они тесно связаны друг с другом).в сочетании с FWIW).
Как вы можете видеть, отличие от виртуальной машины состоит в том, что в этом случае среда выполнения является "внешней" по отношению к запущенной программе, тогда как в (типичном) случае программ Go она находится "вдоль"работающая программа.
Ничто в спецификации языка Go не предписывает точный способ предоставления времени выполнения для работающей программы.
Например, Go 1.11 можно скомпилировать в WASM , и среда выполнения частично обеспечивается встроенным кодом среды выполнения Goи частично - хостом WASM (обычно браузером).
В качестве другого примера, GCC имеет внешний интерфейс Go, в отличие от «стокового» инструмента Go, и на тех платформах, гдевозможно, GCC поддерживает сборку Go таким образом, что их скомпилированные формы динамически связываются с общей библиотекой, содержащей большую часть кода времени выполнения Go (и кода стандартной библиотеки).В этом случае скомпилированная программа Go не содержит кода времени выполнения, но она связывается во время загрузки программы, а затем она также работает внутри самой программы.
Совершенно возможно реализоватьмодель выполнения для программ Go, которые будут использовать виртуальную машину.