Golang コルーチンの作成とライフサイクル

PHPz
リリース: 2024-04-15 17:06:02
オリジナル
716 人が閲覧しました

Coroutine は、明示的な切り替えを通じて同じコール スタック内の実行ユニットを再利用する軽量のスレッドです。そのライフサイクルには、作成、実行、一時停止、回復、完了が含まれます。 go キーワードを使用してコルーチンを作成します。これは、実際の並列計算 (フィボナッチ数の計算など) に使用できます。

Golang コルーチンの作成とライフサイクル

Golang コルーチンの作成とライフサイクル

はじめに

コルーチン Itコルーチンは軽量のスレッドであり、独立した実行ユニットです。ただし、スレッドとは異なり、コルーチンはスレッドのような独立したコール スタックを持つ必要はありません。代わりに、コルーチンを明示的に中断 (yield) または再開 (resume) することで、コルーチン作成関数のコール スタックを再利用します。

コルーチンの作成

Go では、go キーワードを使用してコルーチンを作成します。

go <协程体>
ログイン後にコピー

このうち、<coroutine body>は、コルーチンによって実行されるコードブロックを表します。

コルーチンのライフ サイクル

コルーチンのライフ サイクルは、主に次の段階に分かれています:

  • 作成: コルーチンは、go キーワードを使用して作成されます。
  • 実行: コルーチンはコード ブロックの実行を開始します。
  • 一時停止: コルーチンは、chan <- または select ステートメントを呼び出すことによって一時停止されます。
  • リカバリ: コルーチンは、<-chan または select ステートメントによって復元されます。
  • Complete: Coroutine の実行が完了するか、close(chan) が呼び出されます。

実践的なケース

コルーチンを使用してフィボナッチ数列を計算する例を次に示します:

package main

import "fmt"

func main() {
    // 创建一个协程计算斐波那契数列
    go func() {
        first, second := 0, 1
        for i := 0; i < 10; i++ {
            fmt.Println(first)
            temp := first
            first = second
            second = temp + second
        }
    }()

    // 主协程等待其他协程执行完成
    <-make(chan bool)
}
ログイン後にコピー

この例では、次のように作成します。フィボナッチ数列を計算するゴルーチン。メインのコルーチンは、make(chan bool) を使用してバッファリングされていないチャネルを作成し、チャネルが閉じられるのを待ちます。ゴルーチンは計算を完了するとチャネルを閉じ、それによってメインのゴルーチンに終了を通知します。

以上がGolang コルーチンの作成とライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート