本質的に、ゴルーチンはコルーチンです。違いは、Golang は、長時間の実行やシステム コールが発生した場合に、ランタイムやシステム コールなどのさまざまな側面でゴルーチンのスケジューリングをカプセル化して処理することです。 (推奨学習: go)
は、他のゴルーチンをスケジュールして実行できるように、現在のゴルーチンの CPU (P) をアクティブに転送します。つまり、Golang は言語レベルからコルーチンをサポートします。 . .
Golang の大きな特徴の 1 つは、言語レベルでコルーチンをネイティブにサポートしていることです。関数またはメソッドの前に go キーワードを追加することでコルーチンを作成できます。
他の側面の比較
メモリ消費量
各ゴルーチン (コルーチン) はデフォルトでメモリを占有します。 Java や C よりもはるかに少ないスレッドです。
ゴルーチン: 2KB
スレッド: 8MB
スレッドとゴルーチンの切り替えスケジューリングのオーバーヘッド
スレッド/ゴルーチンの切り替えオーバーヘッド、ゴルーチンはスレッドよりもはるかに小さい
スレッド: モード切り替え (ユーザー モードからカーネル モードへの切り替え)、16 個のレジスタ、PC、SP...、その他のレジスタのリフレッシュなどが含まれます。
ゴルーチン: レジスタ値の変更は 3 つだけ - PC/SP/DX.
コルーチン (coroutine) は Go 言語の軽量スレッド実装であることがわかっています。ランタイム。
関数呼び出しの前に go キーワードを追加すると、呼び出しは新しい goroutine で同時に実行されます。呼び出された関数が戻ると、このゴルーチンも自動的に終了します。 この関数が戻り値を持つ場合、戻り値は破棄されることに注意してください。
まず、次のプログラム コードを見てください:
func Add(x, y int) { z := x + y fmt.Println(z) } func main() { for i:=0; i<10; i++ { go Add(i, i) } }
上記のコードを実行すると、画面に何も表示されず、プログラムが終了することがわかります。
以上がGolangでコルーチンを開始する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。