동시 작업이 포함된 대기열이 있는 시나리오에서는 활성 고루틴 수를 모니터링하는 것이 필수적입니다. 이렇게 하면 적절한 수의 고루틴이 대기열을 처리하여 성능과 리소스 활용도를 최적화할 수 있습니다.
제공된 코드 조각은 대기열의 요소 수에 따라 고루틴을 생성하는 루프를 보여줍니다. 그러나 이 접근 방식에는 몇 가지 단점이 있습니다.
더 나은 해결책은 동기화 메커니즘을 활용하는 것입니다. 여기서는 WaitGroup이 사용됩니다.
func deen(wg *sync.WaitGroup, queue chan int) { for element := range queue { wg.Done() fmt.Println("element is ", element) if element%2 == 0 { fmt.Println("new element is ", element) wg.Add(2) queue <- (element*100 + 11) queue <- (element*100 + 33) } } } func main() { var wg sync.WaitGroup queue := make(chan int, 10) queue <- 1 queue <- 2 queue <- 3 queue <- 0 for i := 0; i < 4; i++ { wg.Add(1) go deen(&wg, queue) } wg.Wait() close(queue) fmt.Println("list len", len(queue)) //this must be 0 }
이 수정된 코드는 고루틴 수가 항상 4개로 제한되고 대기열의 모든 요소가 처리되면 처리를 완료합니다. 이 접근 방식은 과도한 고루틴 생성 및 CPU 소비 문제를 효과적으로 해결합니다.
위 내용은 Go에서 활성 고루틴 수를 효과적으로 모니터링하고 제어하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!