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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章