7 ポイント 投稿者 darjeeling 2025-09-16 | まだコメントはありません。 | WhatsAppで共有

結論

Python 3.14のfree-threadedビルドでは、asyncioがグローバルインタプリタロック(GIL)を廃止し、スレッドごとの状態管理へ移行することで、真の並列実行を可能にしました。これにより、スレッド数に応じて性能が線形にスケールし、複数のイベントループを並列に実行できるようになり、高性能なマルチスレッドasyncioアプリケーションの新たな可能性が開かれました。


主な変更点

  • GIL (Global Interpreter Lock) の廃止: CPythonのfree-threadedビルドではGILを取り除き、複数のスレッドが同時にPythonコードを実行できるようにします。
  • スレッドセーフ性の確保: asyncioはグローバルなデータ構造の代わりにスレッドごとの状態管理を用いることで、スレッドセーフ性を確保しました。
    • タスクの保存: グローバルなWeakSetの代わりにスレッドごとの循環双方向連結リストを使い、ロック競合と弱参照のオーバーヘッドを取り除きました。
    • 現在のタスクの保存: 「現在のタスク」をスレッド状態に保存することで、より高速でロック不要のアクセスを可能にしました。

性能向上

  • 線形の性能スケーリング: ベンチマークの結果、free-threadedビルドではスレッド数の増加に伴ってasyncioの性能が線形に向上することが示されました。
  • TCPベンチマーク: GILが有効なビルドと比べて、free-threadedビルドではスループットが大幅に向上しました。
  • Webスクレイピングベンチマーク: aiohttpを使ったWebスクレイピングのベンチマークでは、free-threadedビルドで複数のワーカーを使った場合、性能が2倍以上向上しました.

まだコメントはありません。

まだコメントはありません。