2015-09-28 2 views
11

Go source coderuntime/proc.goファイルには、セーフポイント機能を参照するコメントが多数あります。これらのコメントは、ガベージコレクションが安全な時点に関連しているようです。しかし、私はこれらの関数の定義を見つけることができませんでした。Goのソースコードで言及されている「安全なポイント機能」とは何ですか?

セーフポイント機能とは何ですか?そのような機能は何のために使用されていますか?

+5

これらはGCとランタイムの実装の詳細であり、言語自体ではアクセスできません。この特定のバージョンのランタイムがどのように機能するかについての好奇心を尋ねるなら、それは一つのことですが、ユーザーが書いたコードには何の影響もありません。 – JimB

+0

@JimB、私はゴーイング(つまり、ゴルーチンがどのように実装され、スケジュールされているかの詳細)のスレッディングライブラリの実装を理解しようとしていますが、これは少なくともGCの動作と安全点に接しているようです。あなたは正しいですが、これは言語の使い方とは関係ありません。 – merlin2011

+2

現在のランタイムでは最新ではありませんが、これはGCに密接に関連しています。[このトーク](http://talks.golang.org/2015/go-gc.pdf)は興味深いかもしれませんあなた、[動画](https://www.youtube.com/watch?v=aiv1JOfMjm0)。 – JimB

答えて

1

ここでは、このトピックを掘り下げて説明します。

Go's GC safepoints hereについて、いくつか説明しました。

安全なポイントは(ゴーの実装に使用されるような)を効果的に安全な地点の伝統的な定義と同じですように見えます:GCはどのようなすべての変数とレジスタ ホールドを追跡することができます

キーポイント

同じスレッド上の別のユーザがGC

スタックチェックにプリエンプションポイントを折り畳むことを言及します機能中の プロローグ

と、この主張のソースは、次のしている:https://github.com/golang/go/issues/10958

this postによるとgolang-devメーリングリストには、safepointsは「呼び出しサイト」と呼ばれています。

GoのSafepointの性質についていくつかの洞察を得るには、GCの進化を見ることが重要だと思います。

1.5を行く前に、Goは使用していたパラレルストップ世界(STW) コレクター:This postは、次のように言及しています。

Go 1.5には、並行コレクタが導入されています。

その質問へのもう一つの答えが言及:ゴー1.7のよう

、無制限のソースおよび潜在的 非自明なストップ - 世界(STW)時間がスタックされて再スキャンし、残りの1 。

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のガベージコレクタはmoving away from long pausesでしたが、現在は「並行三色、マークスイープコレクタ」となっていますが、これはまだ世代別GCではありません。また、Go's GCは、近代的なエンタープライズアプローチではなく、70年代のGCアイデアを基盤にしているようです。

セーフポイントの移動の概念は、セーフポイントの伝統的な概念ではなく、世代別ガベージコレクションを許可する近代的な資質を持つセーフポイントに沿って、より多くのであるように見えます。

関連する問題