コルーチンは、スレッドよりも軽量な同時実行メソッドであり、スレッド コンテキストの切り替えのオーバーヘッドを必要とせず、単一スレッドで同時実行を実現できます。コルーチンには通常、次のような特徴があります。
コルーチン内のコードは、必要に応じて実行を一時停止したり再開したりできます。
同じスレッド内で複数のコルーチンを同時に実行できますが、一度に実行されるコルーチンは 1 つだけです。
コルーチンは通常、イベント ループ (イベント ループ) に基づいて実装され、イベント ループはコルーチンの実行のスケジュールを担当します。
スレッドとコルーチンはどちらも同時プログラミングを実装する方法ですが、いくつかの異なる特性とアプリケーション シナリオがあります。
**スレッドはオペレーティング システムのスケジューリングの基本単位です。**各スレッドには、スレッド スタック、レジスタなどを含む独自の実行コンテキストがあります。スレッド間の切り替えには、現在のスレッドのコンテキストの保存や別のスレッドのコンテキストの復元などの操作を含むコンテキスト切り替えが必要であり、これらの操作は多くの時間とリソースを消費します。マルチスレッド プログラミングでは、スレッドの切り替えは次の理由から非常に一般的な操作です:
スケジューリング。複数のスレッドが同時に実行される場合、オペレーティング システムはこれらのスレッドをスケジュールし、優先度などの要素に基づいて現在どのスレッドを実行するかを決定する必要があります。スレッドの切り替えは、スケジューリングの基本操作の 1 つであり、スレッドを切り替えることにより、オペレーティング システムは複数のスレッドを同時に実行できます。 ############待って。 IO 操作の完了を待つ、ロックが解放されるのを待つなど、スレッドがイベントの発生を待つ必要がある場合、スレッドは CPU を積極的に解放して、他のスレッドに実行の機会を与えることができます。待機が完了すると、スレッドが再び起動され、実行が続行されます。 ############同時。スレッドは同時実行の効果を実現できます。たとえば、1 つのスレッドがネットワーク リクエストを処理し、別のスレッドがユーザー インタラクションを処理します。これにより、システムの応答速度と処理能力が向上します。
import asyncio async def task1(): print("Task 1") await asyncio.sleep(1) print("Task 1 done") async def task2(): print("Task 2") await asyncio.sleep(2) print("Task 2 done") async def task3(): print("Task 3") await asyncio.sleep(3) print("Task 3 done") async def main(): await asyncio.gather(task1(), task2(), task3())
このコードは、Python のコルーチンと
asyncio、task3
、を定義します。そしてメインのコルーチン関数
。各コルーチン関数は独自のタスク名を出力し、一定時間停止します。メインのコルーチン関数は 以上がPython同時プログラミングでコルーチンを適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。asyncio.gather
を使用して 3 つのコルーチン関数を同時に実行し、最終的な出力結果は次のようになります: Task 1
Task 2
Task 3
Task 1 done
Task 2 done
Task 3 done
[Finished in 3.2s]