ホームページ  >  記事  >  バックエンド開発  >  Golangでコルーチンを開始する方法

Golangでコルーチンを開始する方法

(*-*)浩
(*-*)浩オリジナル
2019-12-30 15:51:063412ブラウズ

Golangでコルーチンを開始する方法

本質的に、ゴルーチンはコルーチンです。違いは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。