【发布时间】:2022-01-17 04:13:59
【问题描述】:
我有一个 go 程序,它是一项服务,预计在发生崩溃或故意关闭之前不会退出。
在这个程序中,我订阅了一个消息队列。订阅方法运行一系列我希望同时运行的事件。我不需要等到它们完成。
这些 goroutine 并不总是使用通道,有时它只是我想并发运行的一个执行块。下面的示例 - goroutine 调用 fmt.Printf() 两次。在这两个调用之后,它是否完成并被 GC 清理,还是我需要显式关闭它?
messageQueue.Subscribe("topic/print", topicPrint)
func topicPrint() {
go func () {
fmt.Println("Here is some topic information")
fmt.Println(topic.Title, topic.Body)
} ()
}
【问题讨论】:
-
Does a goroutine exit when the work has completed假设 goroutine 的the work以它的主体开始并以它的主体结束,是的。After those two calls, does it complete无法保证,除非您同步所有这些,否则它可能会突然停止。and get cleaned up by the GCnp,GC 将适用于那些条件正常的人。, or do I need to explicitly close it?没有。您需要管理内存中的活动对象,但是 GC 可以找出这些数据没有链接到任何运行时对象,然后它会清理。 google.com/search?q=go+gc+tricolor