写点什么

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:003995

评论

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

【圣诞节】会呼吸的玫瑰爱心代码 -李峋爱心续 动画演示思路 代码开源

非喵鱼

Java Python 程序员 前端 爱心代码

流处理基础概念-窗口与时间

穿过生命散发芬芳

流处理 12月月更

设计模式之美——单一职责(Single Responsibility Principle)

GalaxyCreater

设计模式

react源码中的hooks

flyzz177

React

前端二面常考面试题(必备)

loveX001

JavaScript

0停机迁移Nacos?Java字节码技术来帮忙

华为云开发者联盟

Java 云计算 华为云 12 月 PK 榜

React组件之间的通信方式总结(上)

beifeng1996

React

架构实战营模块二作业

张Dave

React源码分析7-state计算流程和优先级

flyzz177

React

记一次Mysql大数据分页优化问题

石臻臻的杂货铺

MySQL 数据库

那些你不知道的 CSS 自定义形状网格布局 3

南城FE

CSS 前端 布局

OpenTelemetry系列 (二)|初探OpenTelemetry

骑牛上青山

Java 调用链 OpenTelemetry 微服务调用链

软件质量问题造成损失高达 2.4 万亿美元!

SEAL安全

软件质量 漏洞管理 12 月 PK 榜 软件供应安全

云与开源,共植数字世界的根

Apache Flink

大数据 flink 实时计算

开始用ChatGPT写作

SkyFire

ChatGPT

react源码中的fiber架构

flyzz177

React

异构混排在vivo互联网的技术实践

vivo互联网技术

算法 异构 混排

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

Verilog 的连续赋值

芯动大师

Verilog Verilog语法 连续赋值

react源码中的协调与调度

flyzz177

React

经常会采坑的javascript原型应试题

loveX001

JavaScript

架构实战 - 模块 2 作业

mm

微信朋友圈 #架构实战营

React源码分析8-状态更新的优先级机制

flyzz177

React

前端面试什么样的回答才能让面试官满意

loveX001

JavaScript

React组件之间的通信方式总结(下)

beifeng1996

React

前端必会react面试题及答案

beifeng1996

React

运维进阶训练营 -W07H

赤色闪电

运维

前端工程师leetcode算法面试必备-二叉树深度广度遍历

js2030code

JavaScript LeetCode

谈谈前端性能优化-面试版

loveX001

JavaScript

从React源码分析看useEffect

flyzz177

React

前端工程师leetcode算法面试必备-二叉树的构造和遍历

js2030code

算法 LeetCode

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