Go에서 고루틴 수명 주기를 관리하는 핵심 방법은 다음과 같습니다. context.Context 사용: 취소 신호 및 기한을 통해 고루틴 수명 주기를 제어합니다. sync.WaitGroup 사용: 기본 고루틴이 계속 실행될 수 있도록 고루틴이 작업을 완료할 때까지 기다립니다. 채널 사용: 신호 통신을 통해 여러 고루틴을 조정하고 모든 고루틴이 완료된 후 후속 처리를 기다립니다.
Go에서 Goroutine의 수명 주기를 관리하세요
Goroutine은 동시성을 지원하는 Go의 경량 스레드입니다. 리소스 누출과 프로그램 충돌을 방지하려면 관리가 중요합니다. 이 문서에서는 다음을 포함하여 Goroutine 수명 주기를 관리하는 다양한 방법을 살펴봅니다.
1. context.Context
사용 context.Context
context.Context
提供了一种在 Goroutine 内传播取消和截止日期信号的机制。要使用它来管理 Goroutine 的生命周期,可以使用以下步骤:
package main import ( "context" "fmt" "time" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() go func() { // Goroutine 的代码 }() // 等待 Goroutine 完成,或超时。 select { case <-ctx.Done(): fmt.Println("Goroutine 已取消或超时。") } }
2. 使用 sync.WaitGroup
sync.WaitGroup
context.Context
는 Goroutine을 관리하는 방법을 제공합니다. 취소 및 마감일 신호를 전파하기 위한 수명 주기 메커니즘입니다. 이를 사용하여 Goroutine의 수명 주기를 관리하려면 다음 단계를 따르세요: package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
wg := sync.WaitGroup{}
// 创建 5 个子 Goroutine
for i := 0; i < 5; i++ {
wg.Add(1) // 递增WaitGroup计数,表明正在等待另一个Goroutine完成
go func(i int) {
fmt.Printf("Goroutine %d 结束。\n", i)
wg.Done() // 递减WaitGroup计数,表明Goroutine已完成
}(i)
}
// 等待所有子 Goroutine 完成
wg.Wait()
fmt.Println("所有子 Goroutine 都已完成。")
}
sync.WaitGroup
🎜sync.WaitGroup
을 사용하여 허용하세요. 고루틴은 각자의 작업을 완료할 때까지 서로를 기다립니다. 이를 사용하여 고루틴의 수명 주기를 관리할 수 있습니다. 모든 하위 고루틴이 완료될 때까지 기본 고루틴에서 기다릴 수 있습니다. 🎜package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup signals := make(chan struct{}) // 创建 5 个子 Goroutine for i := 0; i < 5; i++ { wg.Add(1) go func(i int) { defer wg.Done() // Goroutine退出时递减WaitGroup计数 // 等待其他Goroutine完成 <-signals fmt.Printf("Goroutine %d 已完成。\n", i) }(i) } // 等待所有子 Goroutine完成 wg.Wait() // 发送信号标记所有子Goroutine都已完成 close(signals) fmt.Println("所有子 Goroutine 都已完成。") }🎜🎜3. 채널 사용 🎜🎜🎜채널은 고루틴 간에 통신할 수 있으며 수명 주기를 관리하는 데에도 사용할 수 있습니다. 마스터 고루틴은 고루틴을 완료로 표시하는 채널에 신호를 보내 모든 하위 고루틴이 완료될 때까지 기다릴 수 있습니다. 🎜아아아아
위 내용은 Go에서 고루틴 수명주기를 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!