Richard L. Hudson (Rick) 是内存管理方面的专家,发明了 Train, Sapphire(http://people.cs.umass.edu/~moss/papers/jgrande-2001-sapphire.pdf), 和 Mississippi Delta 等算法,其中 GC stack maps 算法使静态类型语言(比如:Java,C#, Go)的垃圾收集成为可能。他发表了很多关于语言运行时内存管理、并发、并行、内存模型、事务内存的文章。Rick 是 Google Go 团队的一员,并负责 Go 的 GC 和运行时的问题。
在经济上,有个词叫良性循环 —— 不同的事务之间互相促进。在过去的技术界,软硬件的开发也曾近有类似的良性循环。随着 CPU 硬件的升级,运行更快的软件被开发出来,这又促使 CPU 的速度和计算能力进一步的提升。在 2004 年左右,随着摩尔定理的终止,这个良性循环也结束了。
|
现在,更多的晶体管不会带来更快的速度。更多的晶体管意味着更多的核,但是软件还不能完全发挥多核的性能。因为今天的软件不能让多核全部跑起来,那些搞硬件的就不会在 CPU 中集成更多的核。循环被破坏了。 Go 的一个长期目标就是通过提供更多的并行、并发程序来重启这个循环。短期内,我们要做的是提高 Go 的使用率。目前 Go 运行时遇到的最大的问题是 GC 暂停时间太长。 当他的团队开始接手这个问题,他像其它工程师一样开玩笑说,他们最开始的反应不是为了解决这个问题,而是这样解决问题:
但是 Russ Cox 否决了这些想法,所以他们决定挽起袖子好好的努力提升 Go 的 GC。他们开发的算法会牺牲程序的运行能力来减少 GC 延迟。也就是说为了实现更低的 GC 延迟,Go 程序会比以前跑的稍微慢一点。 |
怎样使延迟具体化?
所以我们能够在1毫秒的时间内做多少 GC? Java GC vs. Go GC
|
GC 基本知识
|
Go GC
|
未来
|
转自 http://www.oschina.net/translate/go-gc-solving-the-latency-problem-in-go-1-5