gpt4 book ai didi

go - Go 源代码中提到的 "safe point functions"是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:07:31 26 4
gpt4 key购买 nike

在文件 runtime/proc.go 中的Go source code ,有很多评论提到安全点函数,似乎与垃圾收集安全的时间点有关。但是,我找不到这些函数的任何定义。

什么是安全点函数,它们的用途是什么,这些函数有哪些示例?

最佳答案

这是我能挖掘到的关于这个话题的所有内容。

我发现了一些关于 Go 的 GC 安全点的讨论 here .

看起来安全点(在 Go 实现中使用)实际上与安全点的传统定义相同:

key points where the GC can track what all variables and registers hold

同一线程上的另一个用户提到 GC

folds the preemption points into the stack checks during function prologs

并且此声明的来源如下:https://github.com/golang/go/issues/10958

根据this post在 golang-dev 邮件列表中,安全点也称为“调用站点”。

为了深入了解 Go 安全点的本质,我认为了解其 GC 的演变非常重要。 This post提到以下内容:

Prior to Go 1.5, Go has used a parallel stop-the-world (STW) collector.

Go 1.5 introduces a concurrent collector.

该问题的另一个答案提到:

As of Go 1.7, the one remaining source of unbounded and potentially non-trivial stop-the-world (STW) time is stack re-scanning.

从 1.8 开始,它看起来像 worst-case stop-the-world times have been improved .

另外,here是 Go 的垃圾收集器的当前实现。如果您仔细阅读评论,您会发现它是一个非世代标记清除收集器。您可以在此处阅读更多相关信息:https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e#.udz1kjk3b

最后,here是 Gil Tene 在 golang-dev 邮件列表上的一篇旧帖子,它鼓励使用移动垃圾收集器。他声称(当时是 2012 年)Go 正在使用“保守的、非重定位收集器”,并讨论了允许长时间运行的垃圾收集器的安全点的特性。

虽然 Go 的垃圾收集器是 moving away from long pauses并且现在是一个“并发、三色、标记清除收集器”,它仍然是一个非分代 GC。看起来 Go 的 GC 是基于 70 年代的 GC 思想而不是现代的企业方法。

看起来 Go 的安全点概念更符合传统的安全点概念,而不是具有允许分代垃圾收集的现代品质的安全点。

关于go - Go 源代码中提到的 "safe point functions"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com