Friday, February 16, 2018

Golang 的一组问题,有人说一下看法吗?

http://www.mitbbs.com/article_t/Programming/31520929.html

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: Golang 的一组问题,有人说一下看法吗?
发信站: BBS 未名空间站 (Fri Feb 16 17:41:56 2018, 美东)

知乎上看到的,GC的问题现在解决了吗?

在Go 1.0前夕,其垃圾回收器在32位环境下有内存泄漏,一直拖着不肯改进,这且不说
。Go语言垃圾回收器真正致命的缺陷是,会导致整个进程不可预知的间歇性停顿(Stop
the World)。像某些大型后台服务程序,如游戏服务器、APP容器等,由于占用内存
巨大,其内存对象数量极多,GC完成一次回收周期,可能需要数秒甚至更长时间,这段
时间内,整个服务进程是阻塞的、停顿的,在外界看来就是服务中断、无响应,再牛逼
的并发机制到了这里统统失效。垃圾回收器定期启动,每次启动就导致短暂的服务中断
,这样下去,还有人敢用吗?这可是后台服务器进程,是Go语言的重点应用领域。以上
现象可不是我假设出来的,而是事实存在的现实问题,受其严重困扰的也不是一家两家
了(2013年底ECUG Con 2013,京东的刘奇提到了Go语言的GC、defer、标准库实现是性
能杀手,最大的痛苦是GC;美团的沈锋也提到Go语言的GC导致后台服务间隔性停顿是最
大的问题。更早的网络游戏仙侠道开发团队也曾受Go垃圾回收的沉重打击)。在实践中
,你必须努力减少进程中的对象数量,以便把GC导致的间歇性停顿控制在可接受范围内
。除此之外你别无选择(难道你还想自己更换GC算法、甚至砍掉GC?那还是Go语言吗?
)。跳出圈外,我近期一直在思考,一定需要垃圾回收器吗?没有垃圾回收器就一定是
历史的倒退吗?(可能会新写一篇博客文章专题探讨。)

No comments:

Post a Comment