여러 고루틴 종료 조정
Golang에서 여러 고루틴으로 작업할 때 함께 종료되도록 실행을 동기화해야 하는 경우가 종종 있습니다. . 일반적인 접근 방식 중 하나는 채널을 활용하여 완료 신호를 보내는 것입니다. 그러나 이 방법은 고루틴이 예상 순서대로 종료되지 않으면 "닫힌 채널에 쓰기" 패닉을 초래할 수 있습니다.
고루틴 조정을 위한 컨텍스트 사용
A 더 나은 솔루션에는 컨텍스트를 사용하는 것이 포함됩니다. 컨텍스트는 고루틴 간의 통신 및 취소를 위한 메커니즘을 제공합니다. Go에서 이를 구현하는 방법은 다음과 같습니다.
package main import ( "context" "sync" ) func main() { // Create a context and a function to cancel it ctx, cancel := context.WithCancel(context.Background()) // Initialize a wait group to track goroutine completion wg := sync.WaitGroup{} wg.Add(3) // Add 3 goroutines to the wait group // Launch three goroutines // Each goroutine listens for the context to be done go func() { defer wg.Done() for { select { case <-ctx.Done(): // Context is canceled, end this goroutine } } }() go func() { defer wg.Done() for { select { case <-ctx.Done(): // Context is canceled, end this goroutine } } }() go func() { defer wg.Done() // Perform operations. // When operations are complete, call cancel to end all goroutines cancel() }() // Wait for all goroutines to finish wg.Wait() }
이 예에서는 세 번째 고루틴이 작업을 완료하면 컨텍스트를 취소합니다. 이로 인해 취소가 다른 고루틴에 전파되어 고루틴도 종료됩니다. 컨텍스트를 사용함으로써 패닉 가능성을 제거하고 모든 고루틴이 종료를 효과적으로 조정하도록 보장합니다.
위 내용은 Go에서 여러 고루틴을 어떻게 정상적으로 종료할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!