Rumah > Artikel > pembangunan bahagian belakang > Gunakan Go untuk mengendalikan permintaan serentak berskala besar dengan cekap
Dengan menggunakan primitif serentak Go seperti goroutine dan saluran, anda boleh mengendalikan permintaan serentak berskala besar dengan cekap: mencipta bilangan goroutin yang tetap dan menggunakan saluran untuk menimpan permintaan. Lindungi sumber yang dikongsi dengan kunci atau mutex. Hadkan bilangan permintaan serentak, contohnya dengan menggunakan konteks untuk menetapkan tamat masa.
Mengendalikan permintaan serentak berskala besar dengan cekap dengan Go
Pengenalan
Mengendalikan permintaan serentak berskala besar merupakan cabaran biasa, terutamanya dalam perkhidmatan mikro dan aplikasi web. Go ialah bahasa yang dibina untuk konkurensi dan amat sesuai untuk mengendalikan beban kerja sedemikian. Artikel ini akan memperkenalkan primitif serentak Go dan amalan terbaik serta menggunakan kes praktikal untuk menunjukkan cara mengendalikan permintaan serentak berskala besar dengan cekap.
Goroutine dan Saluran
Goroutine ialah unit perlaksanaan selari ringan dalam Go, serupa dengan utas. Saluran adalah mekanisme untuk komunikasi antara goroutine.
Amalan Terbaik
Kes praktikal
Kami mencipta aplikasi web untuk memproses fail yang dimuat naik oleh pengguna. Aplikasi perlu mengendalikan berbilang permintaan muat naik fail secara serentak.
package main import ( "context" "log" "net/http" "sync" ) const maxConcurrency = 10 var wg sync.WaitGroup func main() { http.HandleFunc("/upload", uploadHandler) http.ListenAndServe(":8080", nil) } func uploadHandler(w http.ResponseWriter, r *http.Request) { wg.Add(1) defer wg.Done() // 创建一个 goroutine 来处理文件上传 go func() { defer r.Body.Close() if err := handleFileUpload(r.Body); err != nil { log.Println(err) } }() // 限制并发上传的数量 ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() select { case <-ctx.Done(): http.Error(w, "Too many concurrent uploads", http.StatusTooManyRequests) return default: } } func handleFileUpload(r io.Reader) error { // 省略实际的文件上传处理 return nil }
Kesimpulan
Dengan mengikuti amalan terbaik yang dibentangkan dalam artikel ini, anda boleh membina aplikasi Go yang cekap dan berskala yang boleh mengendalikan permintaan serentak berskala besar.
Atas ialah kandungan terperinci Gunakan Go untuk mengendalikan permintaan serentak berskala besar dengan cekap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!