Для следующего кода:Является ли процесс тем же, что и Горутин в Голанге?
func main() {
goRtns := runtime.NumGoroutine()
fmt.Println("goroutines:", goRtns)
}
Выход 1
. Но это находится в рамках «процесса», без явного вызова goroutines:
«При вычислении процесс представляет собой экземпляр выполняемой компьютерной программы. Он содержит программный код и его текущую активность. операционная система (ОС), процесс может состоять из нескольких потоков выполнения, которые выполняют команды одновременно ».
Кроме того, из отлично «Как goroutines работать» сообщение в блоге Кришной Sundarram: http://blog.nindalf.com/how-goroutines-work/
«Создание goroutine не требует много памяти - только 2kB из стека Они растут путем выделения и освобождения памяти кучи. как требуется."
Мой вопрос в том, что: экземпляр запущенного кода (моя простая функция main.go) подсчитывается как goroutine библиотекой времени выполнения. Можно ли предположить, что родительский процесс рассматривается как подпрограмма go, с теми же правилами распределения памяти, сбора мусора и т. Д.? Было бы разумно предположить, что чтение факта о выполнении goroutine аналогично общему процессу, который его запускает? Что касается второй цитаты на goroutines выше, это звучит как процесс, увеличивающий/сокращающий его пространство стека по мере выполнения программы, которая является стандартной парадигмой в программировании.
Выполняют ли процессы и подпрограммы общие правила? Или я просто что-то пропустил о количестве гориутов.
Просто забудьте о «процессе», это OS/userpace/layman term. В GO все это goroutine, и они запланированы для потоков. Не существует «ходовых процессов» (что бы это ни значило). – Volker
Чтобы немного расширить это, когда вы запускаете программу go, это похоже на выполнение чего-либо еще - это всего лишь один процесс (если программа явно не создает другие процессы). В программе Go всегда есть хотя бы один goroutine (тот, который запускает 'main'). –