栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Go程序中的三个后台goroutine是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go程序中的三个后台goroutine是什么?

这些不是线程,它们是goroutine,并且数量可能会根据当前的实现而有所不同(即,在go1.2中将显示2)。

现在,看来您有1个用于

main
,而3个则用于runtime / gc。

import "fmt"func main() {    fmt.Println(func() string { panic(nil); return "" }())}

由此可见

goroutine 16 [running]:runtime.panic(0x0, 0x0)    /usr/local/go/src/pkg/runtime/panic.c:279 +0xf5main.func·001(0x3ea4f, 0xdc4b0)    /test/threads.go:6 +0x28main.main()    /test/threads.go:6 +0x1egoroutine 17 [runnable]:runtime.MHeap_Scavenger()    /usr/local/go/src/pkg/runtime/mheap.c:507runtime.goexit()    /usr/local/go/src/pkg/runtime/proc.c:1445goroutine 18 [runnable]:bgsweep()    /usr/local/go/src/pkg/runtime/mgc0.c:1976runtime.goexit()    /usr/local/go/src/pkg/runtime/proc.c:1445goroutine 19 [runnable]:runfinq()    /usr/local/go/src/pkg/runtime/mgc0.c:2606runtime.goexit()    /usr/local/go/src/pkg/runtime/proc.c:1445

如果删除fmt,并使用自举

print
功能,则只会得到2个goroutine。

import "runtime"func main() {    print(runtime.NumGoroutine(), "n")}// prints 2

如果您想确切地知道正在运行的goroutine,请打印堆栈跟踪,调用panic或使用SIGQUIT终止进程(该进程将打印堆栈跟踪并退出)。如果运行绝对最小程序,则可以从中获得堆栈跟踪,可以看到2个goroutine:

package mainfunc main() {    panic(nil)}

Goroutine非常便宜, 许多
事情将启动和停止更多Goroutine,因此尝试跟踪其下限不是很有用。请注意,即使只有两个goroutines(main /
runtime.panic和runtime.MHeap_Scavenger),计数却已经达到17。

panic: nilgoroutine 16 [running]:runtime.panic(0x0, 0x0)    /usr/local/go/src/pkg/runtime/panic.c:279 +0xf5main.main()    /test/threads.go:4 +0x28goroutine 17 [runnable]:runtime.MHeap_Scavenger()    /usr/local/go/src/pkg/runtime/mheap.c:507runtime.goexit()    /usr/local/go/src/pkg/runtime/proc.c:1445exit status 2


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号