Go 関数は、次の方法で Goroutine の実行を制御します: runtime.Goexit(): 現在の Goroutine を強制的に終了します。 sync.WaitGroup: Goroutine のグループが完了するまで待ちます。 select{}: Goroutine が複数のイベントの 1 つを待機し、最初にトリガーされたイベントに基づいて対応するアクションを実行できるようにします。 context.Context: 期限を過ぎたり、Goroutine へのリクエストをキャンセルしたりするために使用できます。
Go 関数が Goroutine の実行を制御する方法
Go プログラミング言語は並行性をサポートしており、Goroutine (軽量スレッド) を使用して実装されています。 )同時進行。ゴルーチンは関数を通じて作成でき、作成後いつでも開始できます。この記事では、Goroutine の実行を制御するために使用されるさまざまな関数を紹介し、いくつかの実用的な例を示します。
Goroutine の実行を制御する関数
実際的なケース
1. Goroutine を終了します
package main import ( "fmt" "runtime" "time" ) func main() { go func() { for { fmt.Println("Goroutine is running...") time.Sleep(1 * time.Second) } }() // 等待 10 秒后终止 Goroutine time.Sleep(10 * time.Second) runtime.Goexit() }
2. sync.WaitGroup を使用して、 Goroutine
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup // 创建 5 个 Goroutine for i := 0; i < 5; i++ { wg.Add(1) go func(i int) { fmt.Printf("Goroutine %d is running...\n", i) time.Sleep(1 * time.Second) wg.Done() }(i) } // 等待所有 Goroutine 完成 wg.Wait() }
3 を待機します。select{} を使用してイベント
package main import ( "fmt" "time" ) func main() { fmt.Println("Waiting for events...") // 创建两个 channel ch1 := make(chan string) ch2 := make(chan string) // 创建两个 Goroutine 向 channel 发送数据 go func() { time.Sleep(1 * time.Second) ch1 <- "Event from Channel 1" }() go func() { time.Sleep(2 * time.Second) ch2 <- "Event from Channel 2" }() for { select { case msg := <-ch1: fmt.Println(msg) return case msg := <-ch2: fmt.Println(msg) return } } }
4 を使用して Goroutine をキャンセルしますえー
以上がgolang 関数はどのように goroutine の実行を制御しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。