#golang はどのようにコルーチンを実装するのでしょうか?
Golang のコルーチン実装方法:
同時プログラミングを実装するには、プロセス、スレッド、および IO 多重化方法があります。 (ここでは、同時実行と並列処理を区別しません。CPU がマルチコアの場合、複数のコアで同時に実行される可能性があります。これを並列処理と呼びます。それがシングルコア CPU であり、キューに入れる必要がある場合は、
プロセスはコンピュータ リソースです。割り当ての最小単位であるプロセスは、プロセッサ リソースと仮想メモリ (1) を抽象化したものですが、仮想メモリはメイン メモリ リソースと仮想メモリを抽象化したものです。ファイル (2)、ファイルは I/O デバイスを抽象化したものです。スレッドはコンピュータのスケジューリングの最小単位であり、同じプロセスによって割り当てられたコンピュータ リソースを共有します。
上記は、コンピュータ システムについての深い理解についてです。
要約すると、実際に同時実行性を実装するのはスレッドです。まず第一に、スレッドはスケジューリングの最小単位であるため、各プロセスにはメイン スレッドがあります。スレッドは 1 つだけを持つことができますが、さらに複数のスレッドを作成することもできます。スレッドのスケジューリングには、CPU スイッチングとカーネル層コンテキスト スイッチングが必要です。スレッド A を実行し、スレッド B に切り替えて、カーネル呼び出しが開始されます。CPU はスレッド A のコンテキストを保持し、スレッド B に切り替えて、アプリケーション層のスケジューリングに制御を移す必要があります。 C プロセスのメイン スレッドが D プロセスのメイン スレッドに切り替えられるため、プロセスの切り替えにはカーネルの切り替えも必要です。
次に、プロセス間で通信する必要がありますが、プロセス間のリソースは共有されません。このとき、IPC (Inter-Process Communication、プロセス間通信) を使用する必要があります。一般的に使用されるものには、セマフォ、共有メモリ、実際にはBaiduには6種類あると言われており、同じプロセスの複数のスレッドがリソースを共有し、プロセスよりも通信がはるかに容易です。現在、Javaなどの多くのプログラミング言語では、この種のスレッド相互作用が行われています実装。
IO 多重化に関しては、実際にはキューを維持し、1 つまたは複数のスレッドをキューに入れてタスクを完了させることを意味します。なぜ?スレッドの数には制限があり、スレッド間の通信にはある程度のリソースが必要となるため、カーネルはコンテキストを頻繁に切り替える必要があります。
1 つのスレッドの IO 多重化 (通常は Redis と Nodejs) では、コンテキストを切り替える必要がまったくなく、1 つのスレッドが世界を支配できます。複数スレッドのIP多重化はGolangコルーチンの実装方法であり、コルーチンは自らスレッドを管理し、スレッドを一定数に制御し、ルールステートマシンを構築してタスクをスケジュールします。
推奨チュートリアル: 「go 言語チュートリアル 」
以上がgolang はどのようにコルーチンを実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。