硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

Go 1.12 发布:改进了运行时性能以及模块支持

  • 2019-03-27
  • 本文字数:987 字

    阅读完需:约 3 分钟

Go 1.12发布:改进了运行时性能以及模块支持

Go最新版本1.12于近日发布,该版本并没有改动语法规范,它主要对运行时性能、编译工具链以及模块系统等进行了优化。另外,它还为 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 的更多信息,请参阅官方发布日志


查看英文原文Go 1.12 Improves Runtime Performance and Module Support


2019-03-27 08:004154

评论

发布
暂无评论
发现更多内容

云效测试篇:测试用例&缺陷管理 | 云效快速入门

阿里云云效

阿里云 DevOps 云原生 云效 测试管理

呼叫医生云! Amazon HealthLake 正式推出

亚马逊云科技 (Amazon Web Services)

存储

Amazon DynamoDB 在智能湖仓架构中的实践

亚马逊云科技 (Amazon Web Services)

存储

一个cpp协程库的前世今生(十九)event

SkyFire

c++ cocpp

区块链技术支撑元宇宙经济系统的有序运转

CECBC

【JavaScript Weekly #399】JavaScript引擎基础(上):形态和内联缓存

道道里

JavaScript 前端

云原生下的指标与日志采集

尔达Erda

程序员 容器 云原生 监控 中间件

从零实现一个 VuePress 插件

冴羽

Vue 前端 博客 vuepress 博客搭建

LabVIEW色彩定位实现药品包装质量检测(实战篇—4)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 色彩定位 药品包装质量检测

没有区块链,就没有元宇宙

CECBC

DevOps峰会 | 研发效能实践助力互联网行业项目管理“行之有效”

有道技术团队

DevOps

Back-to-Basics: Two-Way String Matching

袁世超

如何用建木CI导入导出MySQL数据

Jianmu

MySQL 数据库 持续集成 CI/CD

14 主流的开源监控系统介绍

穿过生命散发芬芳

1月月更 开源监控系统

百分点感知智能实验室:声纹识别技术发展及未来趋势研究

百分点科技技术团队

Apache Atlas 数据血缘

亚马逊云科技 (Amazon Web Services)

存储

【JavaScript Weekly #570】 新一代构建工具对比

道道里

前端 vite 打包 webpack babel

【高并发】要想学好并发编程,关键是要理解这三个核心问题

冰河

并发编程 多线程 高并发 协程 异步编程

【网络安全】JAVA代码审计—— XXE外部实体注入

H

网络安全 代码审计

Web3.0时代的保险业,真的可以实现去中心化吗?

CECBC

LabVIEW OCR 实现车牌识别(实战篇—3)

不脱发的程序猿

OCR 机器视觉 图像处理 LabVIEW 车牌识别

什么是云效,云效平台

阿里云云效

阿里云 DevOps 云原生 研发 研发提效

【JavaScript Weekly #399】JavaScript引擎基础(下):优化原型

道道里

JavaScript 前端

Amazon Redshift 表设计优化 – 优化已有数据表中的列大小

亚马逊云科技 (Amazon Web Services)

存储

Java实现创建Zip压缩包并写入文件

CRMEB

云钉一体加速,阿里云计算巢与钉钉深度融合、共建应用新生态

阿里云弹性计算

阿里云 计算巢 云合计划 云钉一体

启智社区开源项目推荐 | 面向智慧城市的计算机视觉算法基准测试 Benchmark for Smart City上线

OpenI启智社区

计算机视觉 开源项目

网络安全kali渗透学习 web渗透入门kali系统的安装和使用。

学神来啦

投稿开奖丨“轻量应用服务器”征文活动(9&10月)大奖公布

阿里云弹性计算

阿里云 轻量应用 征文投稿开奖

面向未来,我们来聊一聊什么是现代化数据架构

亚马逊云科技 (Amazon Web Services)

存储

Go 1.12发布:改进了运行时性能以及模块支持_编程语言_Sergio De Simone_InfoQ精选文章