>  기사  >  백엔드 개발  >  **WaitGroup 및 채널을 사용하는 Golang 프로그램이 무기한 실행되는 이유는 무엇입니까?**

**WaitGroup 및 채널을 사용하는 Golang 프로그램이 무기한 실행되는 이유는 무엇입니까?**

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-26 09:46:29767검색

**Why Does My Golang Program Using WaitGroup and Channels Run Indefinitely?**

Golang 프로그램의 WaitGroup 및 채널 사용

이 Golang 프로그램은 sync.WaitGroup 및 채널을 활용하여 효율적인 고루틴 실행 및 데이터 수집을 달성합니다. 하지만 작업을 완료한 후에도 프로그램이 종료되지 않는 문제가 발생합니다. 이 기사에서는 문제를 자세히 조사하고 해결책을 제공합니다.

이 프로그램에는 기호 목록에 대한 주식 시세를 검색한 다음 결과를 파일에 저장하는 작업이 포함됩니다. 이는 고루틴과 채널의 조합을 사용하여 가져오기 프로세스를 동시에 실행하고 WaitGroup을 사용하여 모든 작업의 ​​완료를 추적합니다. 그러나 fetchedSymbols 채널이 무기한 열려 있기 때문에 프로그램은 무한 루프에 빠지게 됩니다.

이 문제를 해결하려면 프로그램은 모든 고루틴이 작업을 마친 후 fetchedSymbols 채널을 닫아야 합니다. 이미 고루틴 완료를 추적하는 WaitGroup을 이 목적으로 활용할 수 있습니다. WaitGroup이 0에 도달할 때 채널을 닫는 go func() 래퍼를 추가하면 문제가 해결됩니다.

수정된 코드 섹션은 다음과 같습니다.

<code class="go">...
go func() {
    wg.Wait()
    close(fetchedSymbols)
}()

for response := range fetchedSymbols {
    fmt.Println("fetched " + response)
}

...</code>

추가된 go func() 루틴은 WaitGroup이 0에 도달할 때까지 기다립니다. 이는 모든 고루틴이 작업을 완료했음을 나타냅니다. 그런 다음 fetchedSymbols 채널을 닫아 메인의 범위 루프가 예상대로 종료되고 프로그램이 실행을 완료할 수 있도록 허용합니다.

이 개선된 프로그램은 동시 고루틴 실행 및 데이터 검색을 위해 WaitGroup 및 채널을 효과적으로 활용하고 종료됩니다. 필요한 모든 작업을 성공적으로 완료한 후.

위 내용은 **WaitGroup 및 채널을 사용하는 Golang 프로그램이 무기한 실행되는 이유는 무엇입니까?**의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.