Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Aplikasi gabungan pengaturcaraan serentak dan WaitGroup di Golang

Aplikasi gabungan pengaturcaraan serentak dan WaitGroup di Golang

WBOY
WBOYasal
2023-09-28 09:42:301059semak imbas

Aplikasi gabungan pengaturcaraan serentak dan WaitGroup di Golang

Aplikasi gabungan pengaturcaraan serentak dan WaitGroup di Golang

Dalam bidang pembangunan perisian hari ini, prestasi dan kecekapan sentiasa menjadi tumpuan pembangun . Pengaturcaraan serentak ialah cara penting untuk meningkatkan kecekapan perisian. Dalam bahasa Go, kita boleh menggunakan goroutine untuk melaksanakan pengaturcaraan serentak, dan WaitGroup ialah mekanisme untuk menunggu sekumpulan goroutine menyelesaikan kerja.

WaitGroup ialah primitif penyegerakan terbina dalam bahasa Go Ia menyediakan mekanisme mudah untuk menunggu penyiapan kumpulan goroutin. Kita boleh menambah bilangan goroutine untuk menunggu melalui kaedah Tambah, mengurangkan kiraan kumpulan menunggu sebanyak 1 melalui kaedah Selesai, dan menyekat utas utama melalui kaedah Tunggu sehingga pembilang kembali kepada sifar.

Di bawah, kami akan menggunakan contoh khusus untuk menunjukkan aplikasi gabungan pengaturcaraan serentak dan WaitGroup di Golang.

Katakan kita mempunyai keperluan untuk memuat turun imej daripada berbilang tapak web secara serentak dan menyimpannya secara setempat.

Kita perlu mencipta fungsi terlebih dahulu untuk memuat turun imej:

func downloadImage(url string, wg *sync.WaitGroup) {
    defer wg.Done()

    // 下载图片的逻辑代码
    // ...
}

Fungsi menerima URL dan penunjuk WaitGroup sebagai parameter. Selepas fungsi dilaksanakan, kaunter WaitGroup dimaklumkan untuk mengurangkan sebanyak 1 dengan memanggil wg.Done().

Seterusnya, kami mencipta fungsi utama, yang termasuk senarai URL dan objek WaitGroup:

func main() {
    urls := []string{
        "url1",
        "url2",
        "url3",
        // ...
    }

    var wg sync.WaitGroup

    for _, url := range urls {
        wg.Add(1)
        go downloadImage(url, &wg)
    }

    wg.Wait()

    fmt.Println("所有图片下载完成")
}

Dalam fungsi utama, kami mengulangi senarai URL, untuk setiap URL Panggil fungsi muat turunImage dan pastikan anda mengira dengan betul dengan menghantar penunjuk ke WaitGroup. Sebelum memanggil fungsi muat turunImej, kita perlu meningkatkan pembilang sebanyak 1 melalui wg.Tambah(1). Pada masa yang sama, kami menggunakan wg.Wait() pada penghujung fungsi utama untuk menyekat utas utama sehingga semua goroutine dilaksanakan.

Melalui kod di atas, kami telah melaksanakan fungsi memuat turun imej secara serentak dan menunggu semua tugas muat turun selesai.

Ringkasnya, gabungan pengaturcaraan serentak di Golang dan WaitGroup dapat merealisasikan kerja kolaboratif berbilang gorouti dengan mudah. Melalui WaitGroup, kami boleh memastikan bahawa semua goroutine telah menyelesaikan tugas mereka, membolehkan kami mengendalikan situasi konkurensi dengan lebih cekap dan meningkatkan kecekapan pengendalian perisian.

Sudah tentu, dalam senario pembangunan sebenar, kita mungkin menghadapi masalah pengaturcaraan serentak yang lebih kompleks. Pada masa ini, kami boleh menyelesaikannya dengan bantuan primitif konkurensi lain yang disediakan oleh bahasa Go seperti mutex, saluran dan penyataan pilih. Dengan menguasai konsep dan teknik yang berkaitan pengaturcaraan serentak, kami boleh menggunakan ciri serentak Golang dengan lebih baik dan meningkatkan kecekapan pembangunan perisian.

Saya harap artikel ini dapat membantu pembaca memahami aplikasi gabungan pengaturcaraan serentak dan WaitGroup di Golang, dan diaplikasikan serta dikembangkan dalam pembangunan sebenar.

Atas ialah kandungan terperinci Aplikasi gabungan pengaturcaraan serentak dan WaitGroup 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