gpt4 book ai didi

memory - 进程和Golang中的Goroutine一样吗?

转载 作者:IT王子 更新时间:2023-10-29 01:26:23 25 4
gpt4 key购买 nike

对于下面的代码:

func main() {
goRtns := runtime.NumGoroutine()
fmt.Println("goroutines:", goRtns)
}

输出是1。但这是在一个“进程”中,没有明确调用 goroutines:

“在计算中,进程是正在执行的计算机程序的实例。它包含程序代码及其当前事件。根据操作系统 (OS),进程可能由多个线程组成并发执行指令的执行。”

也来自 Krishna Sundarram 的优秀博客文章“goroutines 的工作原理”:http://blog.nindalf.com/how-goroutines-work/

“goroutine 的创建不需要太多内存——只需 2kB 的堆栈空间。它们通过根据需要分配和释放堆存储来增长。”

那么我的问题是:正在运行的代码实例(我的简单 main.go 函数)被运行时库计为 goroutine。我是否假设父进程被视为一个 go 例程,具有相同的内存分配、垃圾收集等规则?假设阅读有关 goroutine 执行的事实类似于运行它的总体 go 进程是否明智?关于上面 goroutines 的第二个引用,这听起来像是一个进程在程序执行时增加/缩小其堆栈空间,这是编程中的标准范例。

go 进程和例程共享相同的规则吗?或者我只是遗漏了一些关于报告的 goroutines 数量的信息。

最佳答案

Is a process the same as a Goroutine in Golang?

您在这里使用了错误的术语process。在 GO 中,一切都是 goroutine。作为Volker说。你可以从 here 查看 gouroutine 定义:

A goroutine is a lightweight thread managed by the Go runtime.

例如在你的代码中

func main() {
goRtns := runtime.NumGoroutine()
fmt.Println("goroutines:", goRtns)
}

这只有一个 goroutine 因为它只有 main 函数并且里面没有 go 在这里调用。它只是打印给定变量的内容。

另一个例子,如果你在函数 main 中调用了 go :

func main() {

result := sq(sq(sq(gen(1, 2, 3, 4))))

numGoroutines := runtime.NumGoroutine()
fmt.Println("number goroutine = ", numGoroutines)

fmt.Println(<-result)
fmt.Println(<-result)
fmt.Println(<-result)
fmt.Println(<-result)

}

你可以找到 sq 和 gen 函数 here .现在 runtime.NumGoroutine() 将有 5 个协程。由于在函数 gensq 中,我们调用了 go 并且我们在这里组合主题,总数将是 4 + main 最后的结果是 5。

关于memory - 进程和Golang中的Goroutine一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42180716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com