【发布时间】:2017-01-28 04:32:48
【问题描述】:
在他的演讲 - https://blog.golang.org/concurrency-is-not-parallelism 中,Rob Pike 说 go 例程类似于线程,但要便宜得多。谁能解释一下原因?
【问题讨论】:
在他的演讲 - https://blog.golang.org/concurrency-is-not-parallelism 中,Rob Pike 说 go 例程类似于线程,但要便宜得多。谁能解释一下原因?
【问题讨论】:
见“How goroutines work”。
它们在以下方面更便宜:
另外,正如“Go’s march to low-latency GC”中提到的,当运行时负责管理 goroutine 时,GC 更容易实现:
自从在 Go 1.5 中引入并发 GC 以来,运行时一直跟踪 goroutine 自上次扫描堆栈后是否已执行。标记终止阶段会检查每个 goroutine 以查看它是否最近运行过,并重新扫描少数运行过的。
在 Go 1.7 中,运行时维护一个单独的此类 goroutine 的简短列表。这消除了在用户代码暂停时查看整个 goroutine 列表的需要,并大大减少了可以触发内核的 NUMA 相关内存迁移代码的内存访问次数。
【讨论】: