GILの無効化を許可
PYTHON_GIL=0 または -X gil=0 を設定することで、GIL(Global Interpreter Lock)を無効化できるようになった。
- GIL関連のデータ構造は初期化されるが、GILを無効化すると
take_gil() と drop_gil() は早期に戻るようになる。
- GILを無効化した状態でいくつかのテストと小さなプログラムを実行してみたところ、基本的なスレッドプログラムもときどき動作する。
- テストスイート全体を実行しようとすると、
test_asyncio で早い段階でクラッシュする。
GIL無効化メカニズムの追加
- GIL無効化メカニズムを追加するイシュー(#116167)について議論があった。
- フリースレッドビルドでGILを無効化できる機能が追加された。
- GILを再び有効化する作業(#116322)と、デフォルトでGILを無効化する作業(#116329)を追跡している。
コードレビューとテスト
- コードレビュー依頼とテストケース追加について議論があった。
PYTHON_GIL 環境変数のドキュメント化と、ユーザーフィードバックを得るための提案があった。
-X gil オプションの追加と sys.flags への反映、環境変数を扱うテストの修正が含まれる。
GN⁺の見解
- この変更はPythonコミュニティに大きな影響を与える可能性がある。GILはPythonのマルチスレッド性能を制限する、よく知られた要素だからだ。
- GILを無効化する機能は性能向上をもたらす可能性がある一方で、安定性や互換性の問題を引き起こすおそれもあり、慎重なアプローチが必要だ。
- GILなしでPythonを実行することは、とくに並列処理に関わる作業で利点をもたらしうるが、既存の多くのPythonコードはGILを前提に書かれているため、この変化がもたらす影響を評価することが重要だ。
- 他の言語やランタイムでは、GILに似たメカニズムを使わないことが多い。たとえばNode.jsは、非同期I/Oによってシングルスレッド性能を最大化するアプローチを取っている。
- この技術を導入する際は、既存コードのスレッドセーフ性を見直し、必要に応じてリファクタリングを検討する必要がある。GILを無効化して得られる性能上の利点と安定性のバランスを適切に取ることが重要だ。
まだコメントはありません。