Google I/O 2012 のプレゼンテーション「Go 同時実行パターン」では、ゴルーチンが Go 言語の軽量スレッドであるかどうかという問題が提起されています。 、コルーチンとして実装されます。
Coroutine定義と比較
コルーチンは通常、異なるコルーチン間の明示的な制御転送メカニズムを意味します。プログラマーは、コルーチンの実行を一時停止し、別のコルーチンに制御を渡すタイミングをプログラムで決定できます。
ゴルーチンの実装
Go ゴルーチンは、対照的に、特定の、しかし最終的には不定の時点で暗黙的に制御を放棄します。ポイント。たとえば、ゴルーチンは、I/O 操作を実行したり、チャネル経由でデータを送信したりする前に一時停止されます。このアプローチにより、プログラマは状態を効果的に共有するシーケンシャルで軽量なプロセスを作成できます。
実装の詳細
ゴルーチンの実装は、「状態スレッド」ライブラリに似ており、動作します。より低いレベルで。 Go は、外部ライブラリに依存せずに OS カーネルと直接対話します。
更新: 提案されたコルーチン パッケージ
2023 年に、Russ Cox は Go 用の標準コルーチン パッケージを提案しました。明示的な制御転送と協調スケジューリングのためのフレームワーク。
追加注
Go 1.14 より前では、ゴルーチンは非プリエンプティブにスケジュールされ、カーネルがいつでもスレッドを一時停止できました。 Go 1.14 以降、ゴルーチンは (ほぼ) プリエンプティブにスケジュールされ、実行をより詳細に制御できるようになりました。
以上がGo ゴルーチンは真のコルーチンですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。