banner
SlhwSR

SlhwSR

热爱技术的一名全栈开发者
github
bilibili

go的運行時

2.7 Go 執行時 (runtime)#

儘管 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 不需要依賴任何其他檔案,它只需要一個單獨的靜態檔案,這樣你也不會像使用其他語言一樣在各種不同版本的依賴檔案之間混淆。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。