Golang sync.WaitGroup Never Completes
제공된 코드는 URL 목록을 가져오고 조건부로 파일을 다운로드하고 파일에 저장하여 동시성을 보여줍니다. 체계. 기본 고루틴은 sync.WaitGroup을 사용하여 모든 파일을 가져올 때까지 기다립니다. 그러나 모든 요청을 완료한 후에도 프로그램이 종료되지 않습니다.
문제를 이해하려면 WaitGroup의 기능을 고려하십시오. 실행 중인 고루틴의 수를 유지합니다. 개수가 0에 도달하면 대기 그룹은 즉시 반환되어 모든 고루틴의 실행이 완료되었음을 나타냅니다.
주어진 코드에서 WaitGroup의 Add 메서드는 개수를 늘리는 데 사용되는 반면 Done 메서드는 개수를 줄이는 데 사용됩니다. . Add 메서드가 Done 메서드보다 더 많이 호출되거나 그 반대의 경우에는 WaitGroup이 0에 도달하지 않아 기본 고루틴이 무기한 대기하게 됩니다.
제공된 코드에는 두 가지 오류가 있습니다.
func main() { ... go downloadFromURL(url, &wg) ... }
func downloadFromURL(url string, wg *sync.WaitGroup) error { defer wg.Done() ... }
이러한 수정 사항을 적용하면 WaitGroup이 올바르게 작동하고 고루틴이 작업을 완료할 때 개수가 감소합니다. 궁극적으로 메인 고루틴의 성공적인 종료로 이어집니다.
위 내용은 My Go가 동기화되지 않는 이유는 무엇입니까?WaitGroup이 완료되지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!