7

CPython はGlobal Interpreter Lockを使用します。Linux はBig Kernel Lockの痕跡をすべて取り除きました。これらのロックに代わるものは何ですか? すべてを停止させることなく、システムが真のマルチコアまたはマルチプロセッサ システムを最大限に活用するにはどうすればよいでしょうか?

4

4 に答える 4

4

Pythonが原始的な参照カウント方法の代わりにIBM の Recycler のようなより高度なガベージ コレクターを使用する場合、GIL は必要ありません。これはUnladen Swallowが Python のパフォーマンスを改善するために行っていることです。より有望な答えはStackless Python です。これは、従来の CPython のようにオペレーティング システムに依存する代わりに、独自のマイクロスレッド実装を使用します。

于 2011-06-10T01:16:06.053 に答える
2

GIL はプロセス固有であるため、複数の Python プロセスを起動することで回避できます。マルチプロセッシング モジュールは、このための使いやすい API を提供します。

もう 1 つの方法は、必要な種類のデータ処理を行いながら GIL を解放する C 拡張を使用する (または独自に作成する) ことです。

于 2011-03-03T07:47:20.540 に答える
1

単純。Haskell や他の関数型プログラミング言語と同じように、変更可能な状態はありません。メモリ内の何も変更する必要がないため、グローバル ロックは必要ありません。

于 2011-06-10T04:03:36.727 に答える