Skip to content

Runtime

Runtime của ngôn ngữ Go là cơ sở hạ tầng cốt lõi cho việc thực thi chương trình Go, nó负责 quản lý phân phối bộ nhớ, thu gom rác, điều phối goroutine, giám sát hệ thống và các chức năng quan trọng khác của chương trình. Khác với các ngôn ngữ khác, runtime của Go được tích hợp chặt chẽ với code người dùng, điều này cho phép Go thực hiện lập trình并发 hiệu quả và quản lý bộ nhớ tự động.

Các thành phần cốt lõi

Runtime của Go chủ yếu được cấu thành từ các thành phần cốt lõi sau:

Bộ điều phối GMP

Bộ điều phối GMP là một trong những thành phần cốt lõi nhất của runtime Go, nó负责 điều phối một số lượng lớn goroutine đến một số lượng hữu hạn thread hệ thống để thực thi. GMP lần lượt đại diện cho:

  • G (Goroutine): Goroutine, thread nhẹ trong Go
  • M (Machine): Thread hệ thống, thread thực thi ở cấp độ hệ điều hành
  • P (Processor): Processor, chứa các tài nguyên cần thiết để chạy code Go

Thiết kế của bộ điều phối GMP cho phép Go hỗ trợ hiệu quả hàng ngàn goroutine并发, là nền tảng của đặc tính并发 cao của ngôn ngữ Go.

Bộ phân phối bộ nhớ

Bộ phân phối bộ nhớ của Go负责 quản lý phân phối bộ nhớ heap, thiết kế của nó chịu ảnh hưởng sâu sắc từ TCMalloc của Google. Các đặc điểm chính:

  • Thiết kế cache nhiều cấp, giảm cạnh tranh khóa
  • Áp dụng các chiến lược phân phối khác nhau dựa trên kích thước đối tượng
  • Tự động quyết định đối tượng được phân phối trên stack hay heap

Bộ phân phối bộ nhớ phối hợp chặt chẽ với bộ thu gom rác, cùng nhau thực hiện quản lý bộ nhớ hiệu quả.

Bộ thu gom rác

Go áp dụng thuật toán thu gom rác Concurrent Mark-Sweep, các đặc điểm chính:

  • Thuật toán đánh dấu ba màu
  • Kỹ thuật write barrier để thực hiện thu gom并发
  • Độ trễ thấp, thời gian STW dưới 100 micro giây trong hầu hết các trường hợp

Bộ thu gom rác của Go đã được tối ưu hóa qua nhiều năm, đã có thể đáp ứng nhu cầu hiệu suất của hầu hết các kịch bản nghiệp vụ.

Bộ giám sát hệ thống

Bộ giám sát hệ thống (sysmon) là một thread giám sát độc lập,负责:

  • Chiếm quyền các goroutine chạy trong thời gian dài
  • Kiểm tra xem có cần kích hoạt thu gom rác không
  • Giám sát trạng thái hệ thống và thực hiện điều chỉnh tương ứng

Nó chạy liên tục ở nền, đảm bảo chương trình Go chạy ổn định.

Khuyến nghị học tập

Khuyến nghị học theo trình tự sau:

  1. Trước học bộ điều phối GMP, hiểu cơ chế điều phối goroutine
  2. Sau học bộ phân phối bộ nhớ, hiểu bộ nhớ được phân phối như thế nào
  3. Rồi học bộ thu gom rác, hiểu bộ nhớ được thu hồi như thế nào
  4. Cuối cùng học bộ giám sát hệ thống, hiểu cơ chế giám sát nền của runtime

Golang by www.golangdev.cn edit