Model konkurensi dalam Go adalah berdasarkan urutan ringan Goroutines, dibuat dengan kata kunci go dan dijadualkan mengikut masa jalan. Saluran digunakan untuk komunikasi antara goroutine, manakala WaitGroup dan kunci mutex digunakan untuk menyelaraskan pelaksanaan serentak. Contoh praktikal termasuk pelayan web serentak, di mana Goroutines digunakan untuk memproses permintaan secara selari, dengan itu meningkatkan prestasi dan daya pengeluaran. . Concurrency membolehkan pelbagai tugas serentak dilaksanakan secara serentak, meningkatkan prestasi dan daya pengeluaran. Artikel ini mendalami model konkurensi dalam Go dan menyediakan contoh praktikal untuk membantu anda memahami konsep yang berkuasa ini.
Asas Concurrency
Concurrency dalam Go adalah berdasarkan Goroutine, iaitu benang ringan. Tidak seperti urutan sistem pengendalian, Goroutine ialah coroutine yang menggunakan memori dikongsi dan mekanisme penjadualan dalam masa jalan Go. Ini menjadikan Goroutine sangat ringan dan mempunyai overhed yang sangat rendah.Goroutine dan Saluran
Mencipta Goroutine adalah melalui kata kuncigo
. Tidak seperti urutan dalam bahasa lain, Goroutines dalam Go dijadualkan secara automatik mengikut masa jalan. go func() { // Goroutine 代码 }
ch := make(chan int) go func() { ch <- 42 } x := <-ch // 从通道接收值
WaitGroup dan Mutex
Goroutine mudah dibuat, tetapi menyelaraskan pelaksanaan serentak mereka adalah penting. sync.WaitGroup
boleh digunakan untuk menunggu kumpulan Goroutine selesai dan sync.Mutex
boleh digunakan untuk melindungi akses serentak kepada sumber kongsi.
var wg sync.WaitGroup func main() { for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { // 使用 i 的 Goroutine wg.Done() // 信号 Goroutine 完成 }(i) } wg.Wait() // 等待所有 Goroutine 完成 }
Contoh Praktikal: Pelayan Web Serentakgo
关键字。与其他语言中的线程不同,Go 中的 Goroutine 是由运行时自动调度的。
package main import ( "log" "net/http" ) func main() { // 创建一个 HTTP 服务器 http.HandleFunc("/", handler) // 绑定服务器到端口 err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } } func handler(w http.ResponseWriter, r *http.Request) { // 这是一个并发 Goroutine go func() { // 执行一些任务 }() // 主 Goroutine 继续处理请求 }
通道用于在 Goroutine 之间安全地通信。它们允许 Goroutine 将值发送到通道,并且其他 Goroutine 可以从通道接收这些值。
rrreeeWaitGroup 和互斥锁
Goroutine 很容易创建,但协调它们的并发执行至关重要。sync.WaitGroup
可用于等待 Goroutine 组完成,而sync.Mutex
可用于保护对共享资源的并发访问。
实战案例:并发网络服务器
下面是一个使用 Go 编写并发网络服务器的示例:
rrreee结论
通过利用 Goroutine、通道、sync.WaitGroup
和sync.Mutex
sync.Mutex
, anda boleh membina aplikasi Go dengan mata wang tinggi yang mantap. Memahami nuansa model konkurensi adalah kunci untuk menulis kod yang cekap, berskala dan responsif. Dengan latihan dan contoh, anda boleh menguasai pengaturcaraan serentak dan meningkatkan prestasi serta kualiti aplikasi Go anda. 🎜Atas ialah kandungan terperinci Kawalan proses Golang: pemahaman yang lebih mendalam tentang model konkurensi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!