Go コルーチンのライフ サイクルの制御は、次の方法で行うことができます: コルーチンを作成する: go キーワードを使用して新しいタスクを開始します。コルーチンを終了する: すべてのコルーチンが完了するまで待ち、sync.WaitGroup を使用します。チャネル終了信号を使用します。コンテキスト context.Context を使用します。
Go 言語では、コルーチン (ゴルーチンとも呼ばれます) は、メインスレッドをブロックせずに特定のタスクを実行するために使用される軽量の同時実行本体です。コルーチンのライフサイクルを管理することは、堅牢で保守可能な並列コードを作成するために重要です。
go
キーワードを使用してコルーチンを作成します。メインスレッドが実行を継続できるように、バックグラウンドで新しいタスクを開始します。 go
关键字创建协程。它在后台启动一个新的任务,使主线程可以继续执行。
go func() { // 执行任务 }
无法直接终止协程,但有以下方法可以间接达到此目的:
使用 sync.WaitGroup
同步任务完成:
import "sync" var wg sync.WaitGroup func main() { for i := 0; i < 5; i++ { wg.Add(1) go func(i int) { // 执行任务 wg.Done() }(i) } wg.Wait() }
使用通道向协程发送"关闭"信号:
func main() { done := make(chan struct{}) for i := 0; i < 5; i++ { go func(i int) { for { select { case <-done: return // 协程停止 default: // 执行任务 } } }(i) } close(done) // 向所有协程发送"关闭"信号 }
使用 context.Context
import "context" func main() { ctx, cancel := context.WithCancel(context.Background()) for i := 0; i < 5; i++ { go func(i int) { for { select { case <-ctx.Done(): return // 协程停止 default: // 执行任务 } } }(i) } cancel() // 取消上下文 }
sync.WaitGroup</code を使用します。 > 同期するタスク完了: 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main
import "fmt"
import "time"
func main() {
// 使用信道告诉协程何时退出
stop := make(chan struct{})
// 创建 5 个协程
for i := 0; i < 5; i++ {
go func(i int) {
for {
// 检查是否已经收到退出信号
select {
case <-stop:
fmt.Printf("协程 %d 已退出\n", i)
return
default:
fmt.Printf("协程 %d 正在运行\n", i)
time.Sleep(time.Second)
}
}
}(i)
}
// 运行 5 秒,然后发送退出信号
time.Sleep(time.Second * 5)
close(stop)
// 等待所有协程退出
time.Sleep(time.Second * 1)
}</pre><div class="contentsignin">ログイン後にコピー</div></div><h4>チャネル終了シグナルを使用</h4>🎜チャネルを使用してコルーチンに「クローズ」シグナルを送信: 🎜rrreee<h4>コンテキストを使用</h4>🎜 <code>context.Context を使用
コルーチンの実行を管理します。コンテキストがキャンセルされると、コルーチンも終了します: 🎜rrreee🎜実践的なケース🎜🎜 以下は、チャネル終了信号を使用する実践的なケースです:🎜rrreee以上がGolang コルーチンのライフサイクルを制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。