2015-09-28 18 views
11

Trong tập tin runtime/proc.go của Go source code, có nhiều ý kiến ​​đề cập đến chức năng điểm an toàn, có vẻ như liên quan đến các điểm trong thời điểm thu thập rác thải an toàn. Tuy nhiên, tôi không thể tìm thấy bất kỳ định nghĩa nào về các chức năng này."Chức năng điểm an toàn" được ám chỉ trong mã nguồn Go là gì?

chức năng điểm an toàn là gì, chúng được sử dụng cho cái gì và một số ví dụ về các chức năng như vậy?

+5

Đâ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

+0

@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

+2

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

Trả lời

1

Đâ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ệ.

Các vấn đề liên quan