Skip to content

運行時

Go 語言的運行時(runtime)是 Go 程序執行的核心基礎設施,它負責管理程序的內存分配、垃圾回收、協程調度、系統監控等關鍵功能。與其他語言不同,Go 的運行時與用戶代碼緊密集成,這使得 Go 能夠實現高效的並發編程和自動內存管理。

核心組件

Go 運行時主要由以下幾個核心組件構成:

GMP 調度器

GMP 調度器是 Go 運行時最核心的組件之一,它負責將大量的 goroutine 合理地調度到有限的系統線程上執行。GMP 分別代表:

  • G (Goroutine):協程,Go 中的輕量級線程
  • M (Machine):系統線程,操作系統層面的執行線程
  • P (Processor):處理器,包含運行 Go 代碼所需的資源

GMP 調度器的設計使得 Go 能夠高效地支持成千上萬的並發協程,是 Go 語言高並發特性的基石。

內存分配器

Go 的內存分配器負責管理堆內存的分配,其設計深受 Google TCMalloc 的影響。主要特點包括:

  • 多級緩存設計,減少鎖競爭
  • 根據對象大小采用不同的分配策略
  • 自動決定對象分配在棧上還是堆上

內存分配器與垃圾回收器緊密配合,共同實現高效的內存管理。

垃圾回收器

Go 采用並發標記清除(Concurrent Mark-Sweep)垃圾回收算法,主要特點:

  • 三色標記算法
  • 寫屏障技術實現並發回收
  • 低延遲,大部分情況下 STW 時間低於 100 微秒

Go 的垃圾回收器經過多年優化,已經能夠滿足絕大多數業務場景的性能需求。

系統監控器

系統監控器(sysmon)是一個獨立的監控線程,負責:

  • 搶佔長時間運行的協程
  • 檢查是否需要觸發垃圾回收
  • 監控系統狀態並做出相應調整

它在後台持續運行,保障 Go 程序的穩定運行。

學習建議

建議按照以下順序學習運行時的相關知識:

  1. 先學習 GMP 調度器,理解協程的調度機制
  2. 再學習 內存分配器,了解內存是如何分配的
  3. 然後學習 垃圾回收器,理解內存是如何回收的
  4. 最後學習 系統監控器,了解運行時的後台監控機制

Golang學習網由www.golangdev.cn整理維護