Đây là tất cả những gì tôi có thể tìm hiểu về chủ đề này.
Tôi đã tìm thấy một số cuộc thảo luận về các điểm truy cập GC của Go here.
Dường như điểm an toàn (như được sử dụng trong việc thực hiện Go) là có hiệu quả tương tự như định nghĩa truyền thống của một điểm an toàn:
điểm chính nơi GC có thể theo dõi tất cả những gì biến và đăng ký giữ
Một người dùng trên cùng một sợi đề cập rằng GC
gấp các điểm đòn phủ đầu vào đống séc s trong chức năng prologs
và đó là nguồn gốc cho tuyên bố này là như sau: https://github.com/golang/go/issues/10958
Theo this post trên mailing list golang-dev, safepoints còn được gọi là "các trang web gọi".
Để hiểu rõ hơn về bản chất của các điểm truy cập của Go, tôi nghĩ điều quan trọng là phải nhìn vào sự phát triển của GC của nó. This post đề cập đến những điều sau:
Trước khi tới 1.5, Go đã sử dụng bộ thu song song (STW) .
Đi 1.5 giới thiệu một bộ thu đồng thời.
Một câu trả lời cho câu hỏi đó đề cập đến:
Tính đến Go 1.7, là nguồn gốc của vô biên và có khả năng không tầm thường stop-the-thế giới (STW) thời gian được chồng tái quét còn lại .
Từ 1.8, có vẻ như worst-case stop-the-world times have been improved.
Ngoài ra, here là việc triển khai bộ thu gom rác hiện tại của Go. Nếu bạn đọc qua các bình luận, bạn sẽ thấy rằng nó là một bộ sưu tập quét không đánh dấu thế hệ. Bạn có thể đọc thêm về điều này tại đây: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e#.udz1kjk3b
Cuối cùng, here là một bài đăng cũ của Gil Tene trên danh sách gửi thư golang-dev, động cơ này sử dụng bộ thu dọn rác di chuyển.Ông tuyên bố (vào thời điểm năm 2012) rằng Go đang sử dụng một "nhà sưu tập bảo thủ, không di dời" và ông đã thảo luận về các đặc tính của các điểm an toàn cho phép một nhà sưu tập rác dài chạy.
Trong khi bộ thu gom rác của Go là moving away from long pauses và hiện là "bộ thu thập đồng thời, ba màu, đánh dấu quét", nó vẫn là GC không phải thế hệ. Nó cũng giống như GC của Go đang xây dựng trên ý tưởng GC từ những năm 70 chứ không phải là phương pháp tiếp cận doanh nghiệp hiện đại.
Có vẻ như khái niệm của Go về điểm an toàn hơn phù hợp với khái niệm truyền thống của một điểm an toàn hơn là một điểm với chất lượng hiện đại cho phép thu gom rác thế hệ.
Đây là các chi tiết triển khai của GC và thời gian chạy, không thể truy cập được bằng chính ngôn ngữ đó. Nếu bạn đang yêu cầu sự tò mò của chúng tôi về cách phiên bản cụ thể của thời gian chạy hoạt động, đó là một điều, nhưng nó không có hậu quả đối với bất kỳ mã người dùng nào được viết. – JimB
@JimB, tôi đang cố gắng hiểu việc triển khai thư viện luồng trong Go (tức là chi tiết về cách goroutines được triển khai và được lên lịch), và điều này dường như ít nhất liên quan đến hành vi GC và các điểm an toàn. Bạn là chính xác, điều này không có gì để làm với việc sử dụng ngôn ngữ. – merlin2011
Tôi không cập nhật về thời gian chạy hiện tại, nhưng điều này được gắn chặt với GC, [this talk] (http://talks.golang.org/2015/go-gc.pdf) có thể được quan tâm bạn, với [video] (https://www.youtube.com/watch?v=aiv1JOfMjm0). – JimB