Golang에서 여러 파일을 동시에 다운로드하기 위해 Goroutines 및 WaitGroups를 어떻게 사용할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-10-26 07:22:03
원래의
337명이 탐색했습니다.

How Can Goroutines and WaitGroups Be Used to Download Multiple Files Concurrently in Golang?

Golang에서 고루틴을 사용하여 병렬로 여러 파일 다운로드

이 기사에서는 Golang에서 고루틴을 활용하여 여러 파일을 다운로드하는 방법을 살펴보겠습니다.

Dropbox에서 파일을 다운로드하려고 시도하는 다음 코드 조각을 고려하세요.

<code class="go">package main

import (
    "encoding/json"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "net/url"
    "os"
    "path/filepath"
    "sync"
)

...
func main() {

    ...
    for i, file := range flr.FileList {

        go download_file(file, tr)

        if i >= 2 {
            break
        }
    }
   ...
}</code>
로그인 후 복사

그러나 고루틴을 사용하여 이 코드를 실행하려고 하면 실패합니다. 이는 파일 다운로드를 담당하는 고루틴이 작업을 완료하기 전에 기본 고루틴이 종료되기 때문입니다.

이 문제를 해결하고 기본 고루틴이 종료되기 전에 고루틴이 완료될 때까지 기다리도록 하려면 동기화를 사용할 수 있습니다. WaitGroup은 다음과 같습니다.

<code class="go">package main

import (
    ...
    "sync"
)

...
func main() {

    ...
    var wg sync.WaitGroup
    for i, file := range flr.FileList {
        wg.Add(1)

        go download_file(file, tr, &wg)

        if i >= 2 {
            break
        }
    }
    wg.Wait()
    ...
}</code>
로그인 후 복사

여기서 sync.WaitGroup을 생성하고 이를 사용하여 아직 작업을 완료하지 않은 고루틴 수를 추적합니다. 이를 통해 기본 고루틴은 종료하기 전에 모든 고루틴이 작업을 완료할 때까지 기다릴 수 있습니다.

수정된 download_file 함수에서 wg.Done()을 호출하여 고루틴 완료를 알리고 wg 카운터를 감소시킵니다.

고루틴과 대기 그룹을 활용하면 여러 파일을 동시에 효과적으로 다운로드할 수 있어 다운로드 프로세스의 전반적인 효율성이 향상됩니다.

위 내용은 Golang에서 여러 파일을 동시에 다운로드하기 위해 Goroutines 및 WaitGroups를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!