初心者のPythonと複数スレッド。PythonでのI/Oのブロック
ブロッキングとノンブロッキングI/Oについていくつかの記事を読んでいますが、ブロッキングI/Oではタスクを順番に実行できるだけのケースが主な違いです同時に実行される複数のタスク。
この場合、I/O操作(一部のPython標準組み込み関数)をブロックすることによって複数のスレッドを実行する方法はありますか?
初心者のPythonと複数スレッド。PythonでのI/Oのブロック
ブロッキングとノンブロッキングI/Oについていくつかの記事を読んでいますが、ブロッキングI/Oではタスクを順番に実行できるだけのケースが主な違いです同時に実行される複数のタスク。
この場合、I/O操作(一部のPython標準組み込み関数)をブロックすることによって複数のスレッドを実行する方法はありますか?
ブロックI/Oは、プロセス全体ではなく、実行中のスレッドをブロックします。 (少なくともこのコンテキストでは、標準的なPCで)
マルチスレッドは定義の影響を受けません - 現在のスレッドのみがブロックされます。
グローバルインタプリタロック(cpython)は、アクティブなpythonスレッドが同時に実行されるように配置されたメジャーです。これは、通訳者の腐敗を避けるために設置されています。
ブロック操作が発生すると、現在のスレッドがロックを生成し、最初のスレッドがブロックされている間に他のスレッドを実行できるようになります。しかし、CPUバインドされたスレッド(純粋にPython呼び出しが行われたとき)では、実行されているスレッドの数に関係なく1つのスレッドしか実行されません。
興味深いのは、Python 3.2では、グローバルの影響を緩和するコードインタープリタロック。また、Pythonの他の実装では、グローバルインタプリタロックを持たないことに注意することも興味深い。