Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Goroutine dan WaitGroups Boleh Digunakan untuk Muat Turun Berbilang Fail Secara serentak di Golang?

Bagaimanakah Goroutine dan WaitGroups Boleh Digunakan untuk Muat Turun Berbilang Fail Secara serentak di Golang?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-26 07:22:03328semak imbas

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

Memuat Turun Berbilang Fail Selari dengan Goroutine di Golang

Dalam artikel ini, kami akan meneroka cara menggunakan goroutine di Golang untuk memuat turun berbilang fail serentak dari lokasi terpencil.

Pertimbangkan coretan kod berikut, yang cuba memuat turun fail daripada 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>

Walau bagaimanapun, apabila cuba melaksanakan kod ini menggunakan goroutine, ia gagal. Ini kerana goroutine utama keluar sebelum goroutine yang bertanggungjawab memuat turun fail telah menyelesaikan tugas mereka.

Untuk menangani isu ini dan memastikan goroutine utama menunggu goroutine selesai sebelum keluar, kami boleh menggunakan penyegerakan. WaitGroup, seperti berikut:

<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>

Di sini, kami mencipta penyegerakan.WaitGroup dan menggunakannya untuk menjejaki bilangan goroutin yang belum menyelesaikan tugas mereka. Ini membolehkan goroutine utama menunggu sehingga semua goroutine menyelesaikan tugas mereka sebelum keluar.

Dalam fungsi fail_download yang diubah suai, kami memanggil wg.Done() untuk menandakan siapnya goroutine, mengurangkan kaunter wg.

Dengan menggunakan goroutines dan Waitgroup, kami boleh memuat turun berbilang fail secara serentak dengan berkesan, meningkatkan kecekapan keseluruhan proses muat turun.

Atas ialah kandungan terperinci Bagaimanakah Goroutine dan WaitGroups Boleh Digunakan untuk Muat Turun Berbilang Fail Secara serentak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn