golang-design / under-the-hood

📚 Go: Under The Hood | Go 语言原本 | https://golang.design/under-the-hood

Home Page:https://golang.design/under-the-hood

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于8.11 过去、现在与未来章节的疑问

ZhangJiaQ opened this issue · comments

动机

关于8.11 过去、现在与未来章节有点疑问

需求说明

内容中阐述
Go 1:朴素标记清扫
在 Go 1 的时代,尽管所有的用户代码都是并发执行的,但是一旦垃圾回收器开始进行垃圾回收工作时,所有的用户代码都会停止执行,而且垃圾回收器仅在一个线程上执行,这时是最原始的垃圾回收器的实现,即单线程版的三色标记清扫。

Go 1.1, 1.3:并行清扫与精准标记
在 Go 1.3 时候,官方将三色标记清扫算法的垃圾回收代码改为并行,从而缩短了用户代码的停止时间,但是这仍然会造成大量的空隙,如果用户代码是一个 Web 应用,且正在处理一个非常重要的请求,则会对请求延迟造成巨大的影响。

其中 Go 1 朴素标记清扫的时候,应该不算是三色标记清扫,但稳重最后一句话【即单线程版的三色标记清扫。】,是否应该修改为【即单线程版的标记清扫】。

Go 1.1, 1.3:并行清扫与精准标记
其中【在 Go 1.3 时候,官方将三色标记清扫算法的垃圾回收代码改为并行】 是否应该修改为 【在 Go 1.3 时候,官方将标记清扫算法的垃圾回收代码改为并行】

确实,在最初实现的单线程版本中,没有三色的逻辑概念,而是简单的标记清理的过程.

Fixed in #93