2

私はスレッド化と非同期プログラミング全般に比較的慣れていませんが、CPython の GIL に関連するため、この 2 つの違いを理解しようとしています。

私が読んだものから、スレッドには独自のスタックがあり、2 つのモデルは異なるプログラミング パラダイムであることを理解しています。しかし、GIL のために同時に実行できないことを考えると、Python スレッドはその下にある非同期実行の一種なのでしょうか? Python インタープリターがスレッド化を実装する方法、具体的には、あるスレッドがブロックされ、別のスレッドが実行可能であることをどのように判断するかをよりよく理解したいと思いますか?

4

1 に答える 1

1

GIL は、Python コードを実行するときにのみ役割を果たします。たとえば、C で実装されている関数を呼び出します。たとえば、GIL が干渉することはありません。また、ファイルのダウンロードやディスクからのファイルの移動は、Python スレッドと同時に実行できます。

Python Wikiからの引用:

I/O、画像処理、NumPy 数値計算などの潜在的なブロックまたは長時間実行される操作は、GIL の外部で発生することに注意してください。したがって、GIL がボトルネックになるのは、GIL 内部で多くの時間を費やして CPython バイトコードを解釈するマルチスレッド プログラムだけです。

マルチプロセッシングモジュールを見たことがあるかもしれません。これにより、GIL を克服し、マシン上で複数のコアを使用できます。また、代替の Python インタープリターである PyPy をいつか GIL レスにする作業が進行中です (STM/AME を検索してください)。

于 2013-04-08T11:40:52.837 に答える