【问题标题】:What is the goroutine named runtime.gopark?什么是名为 runtime.gopark 的 goroutine?
【发布时间】: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 正在执行的函数的名称。

标签: go goroutine goland


【解决方案1】:

Goroutines 没有命名。 “runtime.gopark”是调试器停止进程并拍摄代码执行快照时执行所在的包/函数。

特别是对于“runtime.gopark”,这意味着 goroutine 暂时“暂停”,由运行时调度程序暂停。

如果您希望更好地了解应用程序并命名 goroutine,则可以使用 IDE 的最新版本,例如 2020.1.2(或更高版本),并像 in this article 中描述的那样注释代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2017-07-14
    相关资源
    最近更新 更多