【发布时间】:2020-05-18 02:39:39
【问题描述】:
我正在调试一个通过 Goland 编写的程序。在调试器中,我可以在正在运行的不同 goroutine 之间进行选择。我发现在我的 goroutine 旁边还有很多其他名为 runtime.gopark 的 goroutine,我怀疑这些是在线程池中等待作业的其他线程。但是,我在网上找不到任何答案。是这样吗?如果不是,它实际上在做什么?
附:这是事件的照片:
【问题讨论】:
-
参考
runtime.gopark的源代码。该函数在其定义上方有文档。 -
direct link to the source code 可能会有所帮助,但请注意,此链接中的行号最终会出错。
-
谢谢。我已经看到了,但是由于我对 go 的源代码不是很熟悉,我希望更熟悉的人可以提供帮助。我从这条评论中得到了我的猜测。
-
请注意,每当一个 goroutine 等待在通道上发送或接收数据时,它将位于
gopark中,这可能会更有帮助。这不是唯一的原因,但很有可能。 -
Goroutines 没有名字。他们唯一的身份是一个数字(在您的示例中为 67)。
runtime.gopark是 goroutine 正在执行的函数的名称。