在他的演讲中 - https://blog.golang.org/concurrency-is-not-parallelism,Rob Pike说,惯例与线程相似但便宜得多。有人可以解释原因吗?
答案 0 :(得分:4)
请参阅" How goroutines work"。
它们更便宜:
另外,正如" Go’s march to low-latency GC"中提到的,当运行时负责管理goroutines时,GC更容易实现:
自从在Go 1.5中引入并发GC以来,运行时一直在跟踪goroutine自上次扫描堆栈以来是否已执行。标记终止阶段将检查每个goroutine以查看它是否最近运行,并将重新扫描少数。
在Go 1.7中,运行时维护了一个单独的这类goroutine的简短列表。这样就无需在用户代码暂停时查看整个goroutine列表,并大大减少了可触发内核与NUMA相关的内存迁移代码的内存访问次数。