1

私はこれらの図を次のように見ました:http://msdn.microsoft.com/en-us/library/ee787088.aspx 数年の間、私はそれらを理解したと思いました。スレッドは実際にはできませんでした。

たとえば、GCが専用スレッドではなく、GCをトリガーしたスレッドで実行されている場合。

「ガベージコレクション中に何が起こるか」という部分を見てください。

赤い矢印を参照してください。これは、ユーザースレッドで実行されているGCであると想定されています。

したがって、スレッドで実行されるワーカーメソッドがあり、そのワーカーがループを実行するとします。そして、ある時点で、GCはkciksを実行します。

私の質問は、GCが開始してから終了するまで、スレッドに何が起こるのかということです。

  • コンテキストスイッチはありますか?
  • GCを実行するために、新しいスレッドコンテキストが割り当てられ、新しいスタックがロードされますか?
  • 他の誰かのスレッドで実行されているGCコードがどれほど正確か(私にとって最も不可解です)...スレッドにスタックが割り当てられ、コードがロードされます..GCコードがどのように実行されたか-私はこの部分を想像することさえできません。
4

1 に答える 1

1

GCは他の誰かのスレッドでどのように実行されますか?「あなたの」スレッドは実際にはあなたのスレッドではないので、そうではありません。それらはCLRのスレッドです!

CLRは、スレッドのコードは言うまでもなく、スレッドのスタックをいじくり回すことができます。これにより、CLRはと呼ばれることを実行できますthread hijacking。基本的に、呼び出しスタックの戻りポインターを変更して、現在のメソッドが戻ると、コードがガベージコレクターの実行を可能にする特別な関数に転送されるようにします。GCが完了すると、プログラムはユーザーコード内の適切な場所に戻ることができ、通常どおりに処理が続行されます。

于 2012-07-15T03:50:19.587 に答える