2

私の質問は、Parrot Virtual Machine ( http://www.parrot.org ) のガベージ コレクターについてです。

マルチスレッドですか?

4

1 に答える 1

4

Parrot 自体はマルチスレッドであり、利用可能な物理 CPU コアまで直線的にスケールアップし、GC は複数のスレッドを適切にサポートします。つまり、データ構造をロックすることはありません(これは、従来のハッシュ、PMC、およびアレイ全体をロックします)が、GC 自体は個別のスレッドで実行されません。GC はマスター スレッドでのみ実行され、単純な Mark&Sweep (つまり、「世界を止める」 ) 3 色世代 GC です。

GC スレッド設計の概要は、http: //perl6advent.wordpress.com/2012/12/11/day-11-parrot-threads/で説明されています。実装者による詳細は、 http: //niner.name/Hybrid_Threads_for_the_Parrot_VMで説明されています。 .pdf

ただし、parrot は、他のタスク (スレッド) からではなく、マスター インタープリターから作成されるスレッド (つまり、タスク) のみをサポートすることに注意してください。スレッドプールは、起動時に事前に初期化され、自動的に管理されます。所有者のみが、優先順位が付けられたスケジュールされた小さなプロキシ ライター タスクを介してデータを書き込むことができます。技術的には、他のタスクからタスクを作成できますが、リークが発生します。

他のスレッドには、非アトミック データが読み取り専用プロキシ オブジェクトを介して表示されます。高水準言語コンパイラは、これらのライター タスクを作成する必要があります。examples/threads/ディレクトリを参照してください。

于 2014-09-05T15:27:14.963 に答える