Rumah >pembangunan bahagian belakang >Golang >Amalan projek: Menggunakan Go WaitGroup untuk meningkatkan prestasi serentak Golang
Projek praktikal: Menggunakan Go WaitGroup untuk meningkatkan prestasi serentak Golang
Abstrak:
Dalam era Internet hari ini, pemprosesan serentak yang tinggi telah menjadi isu yang tidak boleh diabaikan dalam pembangunan pelbagai sistem. Sebagai bahasa pengaturcaraan yang menyokong konkurensi yang cekap, Golang mempunyai ciri pengaturcaraan serentak yang kaya. Artikel ini memperkenalkan cara menggunakan Go WaitGroup untuk meningkatkan prestasi serentak Golang melalui senario projek sebenar. Menggunakan contoh kod khusus sebagai petunjuk, pembaca dibimbing untuk menggunakan WaitGroup untuk melaksanakan pemprosesan tugas serentak dalam pertempuran sebenar.
Kata kunci:
Golang; prestasi concurrency; WaitGroup; contoh kod pertempuran
3.1 Initialize WaitGroup
Dalam urutan utama, anda perlu memulakan objek WaitGroup terlebih dahulu. Objek WaitGroup mengira bilangan tugas menunggu melalui kaedah Tambah.
var wg sync.WaitGroup
3.2 Menambah tugas
Dalam tugasan serentak, tugasan tertentu perlu dilakukan dalam goroutine, dan selepas tugasan selesai, tugasan ditandakan sebagai selesai melalui kaedah Selesai.
wg.Add(1) // 增加一个任务计数 go func() { defer wg.Done() // 标记任务完成 // 执行具体任务 }()
3.3 Menunggu tugasan selesai
Urut utama menunggu semua tugasan diselesaikan dengan memanggil kaedah Tunggu.
wg.Wait()
package main import ( "fmt" "io/ioutil" "net/http" "sync" ) func main() { urls := []string{"https://www.example.com/1", "https://www.example.com/2", "https://www.example.com/3"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { defer wg.Done() resp, err := http.Get(url) if err != nil { fmt.Printf("Failed to fetch %s: %v ", url, err) return } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { fmt.Printf("Failed to read response body from %s: %v ", url, err) return } err = ioutil.WriteFile("data/"+url, body, 0644) if err != nil { fmt.Printf("Failed to write file for %s: %v ", url, err) } }(url) } wg.Wait() fmt.Println("All tasks completed.") }
Dalam kod sampel di atas, kami menggunakan WaitGroup untuk melaksanakan pemprosesan serentak memuat turun data daripada berbilang URL. Tingkatkan kiraan tugas melalui kaedah Tambah, tandakan selesai tugasan melalui kaedah Selesai, dan tunggu semua pelaksanaan tugas selesai melalui kaedah Tunggu. Dengan cara ini, kita boleh mengendalikan tugas serentak dengan cekap.
Rujukan:
【Jumlah perkataan artikel: 495】
Atas ialah kandungan terperinci Amalan projek: Menggunakan Go WaitGroup untuk meningkatkan prestasi serentak Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!