Go语言 1.3主要改动翻译
原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface
1、对本地客户端的支持
Native Client在Go1.3中又重新出现啦,目前来说既可以在32位Inter架构处理器上(GOARCH=386)运行,也能在64位Inter架构运行,但是在64位架构上依然使用的是32位pointer,而且对于ARM架构是暂不支持的。注意这个是本地客户端(NaCI),而不是可移植本地客户端(PNaCI)。NaCI的具体用途可见博主的另一篇博客。
2.栈
Go 1.3改变了旧版本中goroutine的栈实现方式,从分段栈变为连续栈实现。当一个goroutine需要更多的栈空间且超过了当前可用栈大小时,旧栈会被复制到一个单独的更大的内存块。这个转换消耗会被很好的分摊,因此可以避免在分段栈时,一个重复的计算导致栈不停的分配和释放,因此可以避免以前的"hot split“问题。具体的性能改进可见design document(这里稍后会翻译,请持续关注博主的博客)
3.栈大小
旧的Go版本中把栈空间的最小值增加为8K字节,对于Go 1.3中的栈,会降低为4K 字节
4.性能
Go的二进制数据在这个版本中很多方面的性能都得到了提升,因为runtime和GC的改变还有一些libraries的改变,重要的改变有以下:
默认栈的大小从8K变为4K 字节;
GC的速度得到了提升,现在是采用了一个并发GC扫地算法,可以更好的并行,使用更大的页,因此可以缩短50-
70%的GC中断时间;
资源竞争的检测快了40%;
正则表达式regexp对于特定的简单表达式进行了优化并显著的提升了性能,因为新版本中实施了新的引擎。其中引
擎的选择是系统自动完成的,具体的细节对于用户是隐藏的;
现在runtime包含了特定的栈信息:记录一个goroutine被阻塞的时间。当发生死锁或者性能问题的时候,这个非常有
用;
5.一些库的改变和优化(暂不翻译)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。