【问题标题】:Who does the garbage collection work in go?垃圾收集在谁中工作?
【发布时间】:2015-04-30 21:40:30
【问题描述】:
【问题讨论】:
标签:
go
garbage-collection
【解决方案1】:
您的许多问题都在这里得到解答:
剩下的:
但是谁做的呢?
Go 实现提供的本机代码运行时库。
(我没有看过实现,但很难想象你可以在 Go 语言中“在线上”为 Go 实现高性能 GC。)
Go 代码会编译为本机二进制文件,对吧?
正确。 Go 常见问题解答说得很清楚。
所以不会有像 Java 这样可以依赖的虚拟机。
正确。然而,这并没有什么区别。在 Java 的情况下,GC 也是由 Java 运行时提供的本地代码库实现的。
那么这些肮脏的工作是谁为我们做的呢?一个神秘的线程?还是只是一个 goroutine?
从 Go 1.1 开始,GC 是并行的,所以在幕后肯定有某种多线程在进行。 Goroutines 是 Go 语言的概念,很难想象你会在本机代码 GC 实现中“线下”使用它们。 (但我可能是错的......)
但您还需要了解,goroutines 还需要多个线程。常见问题解答说:
“为什么我的多协程程序不使用多个 CPU?
您必须设置 GOMAXPROCS shell 环境变量或使用运行时包的同名函数,以允许运行时支持使用多个操作系统线程。"
看到了吗?底层涉及原生/操作系统线程。