Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了记忆 – 一个过程和Golang中的Goroutine一样吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对于以下代码

func main() {
    goRtns := runtime.NumGoroutIne()
    fmt.Println("goroutInes:",goRtns)
}

输出为1.但这是在一个“进程”内,没有明确调用goroutIne:@H_618_10@

“在计算中,进程是正在执行的计算机程序的实例.它包含程序代码及其当前活动.根据操作系统(OS),进程可以由执行的多个执行线程组成同时说明.“@H_618_10@

此外,来自Krishna Sundarram的优秀“How goroutInes work”博客文章http://blog.nindalf.com/how-goroutines-work/@H_618_10@

“创一个goroutIne不需要太多内存 – 只有2kB的堆栈空间.它们通过根据需要分配和释放堆存储来增长.”@H_618_10@

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

流程和例程是否共享相同的规则?或者我只是遗漏了报道的goroutInes数量.@H_618_10@

解决方法

在这里使用了错误的术语流程.在GO中,一切都是goroutIne.正如Volker所说.你可以从here看到gouroutIne的定义:@H_618_10@

例如在你的代码中@H_618_10@

func main() {
    goRtns := runtime.NumGoroutIne()
    fmt.Println("goroutInes:",goRtns)
}

这只有一个goroutIne,因为它只有主要功能,里面没有去调用这里.它只是打印给定变量的东西.@H_618_10@

一个例子,如果你在@L_853_11@main中调用了:@H_618_10@

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个goruTine.由于内部函数gen和sq我们已经调用了,我们在这里结合主题总数将是4,主要是最终结果为5.@H_618_10@

大佬总结

以上是大佬教程为你收集整理的记忆 – 一个过程和Golang中的Goroutine一样吗?全部内容,希望文章能够帮你解决记忆 – 一个过程和Golang中的Goroutine一样吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。