1. 程式人生 > >Go 運行時(runtime)

Go 運行時(runtime)

垃圾 .com map cgo 一個 也不會 bsp 部分 targe

盡管 Go 編譯器產生的是本地可執行代碼,這些代碼仍舊運行在 Go 的 runtime(這部分的代碼可以在 runtime 包中找到)當中。這個 runtime 類似 Java 和 .NET 語言所用到的虛擬機,它負責管理包括內存分配、垃圾回收(第 10.8 節)、棧處理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。

runtime 主要由 C 語言編寫(Go 1.5 開始自舉),並且是每個 Go 包的最頂級包。你可以在目錄 $GOROOT/src/runtime 中找到相關內容。

垃圾回收器 Go 擁有簡單卻高效的標記-清除回收器。它的主要思想來源於 IBM 的可復用垃圾回收器,旨在打造一個高效、低延遲的並發回收器。目前 gccgo 還沒有回收器,同時適用 gc 和 gccgo 的新回收器正在研發中。使用一門具有垃圾回收功能的編程語言不代表你可以避免內存分配所帶來的問題,分配和回收內容都是消耗 CPU 資源的一種行為。

Go 的可執行文件都比相對應的源代碼文件要大很多,這恰恰說明了 Go 的 runtime 嵌入到了每一個可執行文件當中。當然,在部署到數量巨大的集群時,較大的文件體積也是比較頭疼的問題。但總得來說,Go 的部署工作還是要比 Java 和 Python 輕松得多。因為 Go 不需要依賴任何其它文件,它只需要一個單獨的靜態文件,這樣你也不會像使用其它語言一樣在各種不同版本的依賴文件之間混淆。

Go 運行時(runtime)