博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go 1.12发布:改进了运行时性能以及模块支持
阅读量:5943 次
发布时间:2019-06-19

本文共 1042 字,大约阅读时间需要 3 分钟。

于近日发布,该版本并没有改动语法规范,它主要对运行时性能、编译工具链以及模块系统等进行了优化。另外,它还为TLS 1.3提供了opt-in支持,同时改进了对MacOS和iOS等系统的支持。

Go 1.12最大的更新亮点是改进了Go运行时对内存分配和释放的处理方式。更具体地说,当堆内存中存在大量存活单元的时候,它能更好地提升垃圾回收中扫除(Sweep)阶段的性能,该阶段需要从头到尾扫描整个内存空间,以确定要释放的内存块。这也减少了内存回收后马上再分配的时间延迟;而且,垃圾回收器在释放内存时也表现得更具侵略性,从整体上减小了程序所占用的内存。特别是当申请内存不能在堆中直接分配的时候,会被强制执行这种释放行为。

其他对Go运行时的改进包括:优化了定时器和最后期限(Deadline)相关的代码,可以更快地处理网络连接时的最后期限问题;支持通过设置环境变量cpu.extension=off来禁用可选CPU指令集的扩展;提高了程序内存配置文件的准确性,尤其是在程序从堆中申请了很多大块内存的时候。

Go 1.12对模块的支持也做了一些改进。模块系统最初在Go 1.11版本中被,该系统与传统的GOPATH方法并存。 为了简化两者之间的切换,Go 1.11引入了环境变量GO111MODULE,以及一个默认的auto(自动)模式,当Go命令在gopath/src以外的目录树中运行并且其根目录中包含Go.mod文件时,该自动模式会尝试使用模块系统。 Go 1.12更进一步,即使根目录中不存在Go.mod文件,它也允许一些Go命令按照模块模式运行。 此外,Go 1.12也引入了很多针对模块系统实现的修补。

如上所述,Go编译工具链也得到了改进,包括更积极的使用内联函数;新增了标志变量-lang,以实现对不同语言版本的配置;更好的调试信息;以及针对Go和汇编函数不同的调用约定,在ABI层实现的一个。

Go 1.12还引入了对TLS 1.3的支持,可以通过设置GODEBUG环境变量tls13=1来启用它。TLS 1.3向下兼容了1.2版本中除TLSUnique以外的所有特性,并为这些特性提供了更好的安全性和性能。 但是,一些TLS 1.3特性仍处在开发过程中,如密码套件的可配置性等。TLS 1.3将在Go 1.13中默认启用。

最后,Go新版本提高了对macOS、iOS、AIX和Windows/ARM等系统的兼容性支持。

关于Go 1.12的更多信息,请参阅。

查看英文原文

转载地址:http://ubzxx.baihongyu.com/

你可能感兴趣的文章
silverlight学习布局之:布局stackpanel
查看>>
理解并自定义HttpHandler
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
JavaScript标准库系列——RegExp对象(三)
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
关于缓存命中率的几个关键问题!
查看>>
oracle中create table with as和insert into with as语句
查看>>
kafka连接异常
查看>>
11g废弃的Hint - BYPASS_UJVC
查看>>
为什么工业控制系统需要安全防护?
查看>>
Mongodb部署记录[3]-主从搭建
查看>>
hive sql操作
查看>>
tomcat 深度优化
查看>>
127 - "Accordian" Patience
查看>>
Mac 常用快捷键
查看>>
阿里云CentOS7安装Oracle11GR2
查看>>
nginc+memcache
查看>>
php正则匹配utf-8编码的中文汉字
查看>>
MemCache在Windows环境下的搭建及启动
查看>>
linux下crontab实现定时服务详解
查看>>