(Đối với Go 1.8 - Q1 2017, xem bên dưới )
Trình thu gom rác đồng thời Go 1.5 tiếp theo liên quan đến việc có thể "tăng tốc" gc nói.
Đây là một đề xuất được trình bày trong bài báo này có thể phù hợp với Go 1.5, nhưng cũng giúp hiểu được gc trong Go.
Bạn có thể thấy trạng thái trước 1.5 (Stop The World: STW)
Trước Go 1.5, Go đã sử dụng bộ thu thập điểm dừng song song (STW).
Mặc dù bộ sưu tập STW có nhiều nhược điểm, nhưng ít nhất nó cũng có hành vi tăng trưởng đống có thể dự đoán và kiểm soát được.
(Ảnh từ bài thuyết trình GopherCon 2015 " Go GC: Giải quyết vấn đề độ trễ trong Go 1.5 ")
Núm điều chỉnh duy nhất cho bộ sưu tập STW là “GOGC”, mức tăng trưởng đống tương đối giữa các bộ sưu tập. Cài đặt mặc định, 100%, đã kích hoạt thu gom rác mỗi khi kích thước heap tăng gấp đôi so với kích thước heap trực tiếp như của tập hợp trước:
Định thời gian GC trong bộ thu STW.
Go 1.5 giới thiệu một bộ thu đồng thời .
Điều này có nhiều ưu điểm hơn so với thu thập STW, nhưng khó kiểm soát sự tăng trưởng của đống rác vì ứng dụng có thể phân bổ bộ nhớ trong khi trình thu gom rác đang chạy .
(Ảnh từ bài thuyết trình GopherCon 2015 " Go GC: Giải quyết vấn đề độ trễ trong Go 1.5 ")
Để đạt được cùng một giới hạn tăng trưởng đống, thời gian chạy phải bắt đầu thu gom rác sớm hơn, nhưng sớm hơn bao nhiêu phụ thuộc vào nhiều biến, nhiều biến trong số đó không thể dự đoán được.
- Khởi động bộ thu quá sớm và ứng dụng sẽ thực hiện quá nhiều bộ sưu tập rác, gây lãng phí tài nguyên CPU.
- Khởi động bộ thu quá muộn và ứng dụng sẽ vượt quá mức tăng trưởng đống tối đa mong muốn.
Để đạt được sự cân bằng phù hợp mà không phải hy sinh sự đồng thời đòi hỏi người thu gom rác phải điều chỉnh tốc độ cẩn thận.
Tốc độ GC nhằm mục đích tối ưu hóa theo hai chiều: tăng trưởng đống và CPU được sử dụng bởi bộ thu gom rác.
Thiết kế của tốc độ GC bao gồm bốn thành phần:
- một công cụ ước tính cho số lượng công việc quét mà một chu kỳ GC sẽ yêu cầu,
- một cơ chế để các tác nhân gây đột biến thực hiện khối lượng công việc quét ước tính vào thời điểm phân bổ heap đạt được mục tiêu heap,
- một công cụ lập lịch để quét nền khi trình đột biến hỗ trợ sử dụng kém ngân sách CPU và
- một bộ điều khiển tỷ lệ cho trình kích hoạt GC.
Thiết kế cân bằng hai quan điểm khác nhau về thời gian: thời gian CPU và thời gian heap .
- Thời gian CPU giống như thời gian đồng hồ treo tường tiêu chuẩn, nhưng
GOMAXPROCS
nhanh hơn.
Nghĩa là, nếu GOMAXPROCS
là 8, thì tám giây CPU vượt qua mỗi giây tường và GC nhận được hai giây thời gian CPU mỗi giây tường.
Bộ lập lịch CPU quản lý thời gian của CPU.
- Thời gian heap trôi qua được đo bằng byte và di chuyển về phía trước khi các tác nhân gây đột biến phân bổ.
Mối quan hệ giữa thời gian đống và thời gian tường phụ thuộc vào tỷ lệ phân bổ và có thể thay đổi liên tục.
Mutator hỗ trợ quản lý thời gian qua heap, đảm bảo công việc quét ước tính đã được hoàn thành vào thời điểm heap đạt đến kích thước mục tiêu.
Cuối cùng, bộ điều khiển kích hoạt tạo ra một vòng phản hồi liên kết hai chế độ xem thời gian này với nhau, tối ưu hóa cho cả mục tiêu thời gian đống và thời gian CPU.