加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

记忆 – 一个过程和Golang中的Goroutine一样吗?

发布时间:2020-12-16 09:25:29 所属栏目:大数据 来源:网络整理
导读:对于以下代码: func main() { goRtns := runtime.NumGoroutine() fmt.Println("goroutines:",goRtns)} 输出为1.但这是在一个“进程”内,没有明确调用goroutine: “在计算中,进程是正在执行的计算机程序的实例.它包含程序代码及其当前活动.根据操作系统(OS)
对于以下代码:

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

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

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

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

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

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

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

解决方法

Is a process the same as a Goroutine in Golang?

您在这里使用了错误的术语流程.在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中调用了:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读