Artikel ini meneroka ciri -ciri konkurensi Go, yang memberi tumpuan kepada goroutin dan saluran. Concurrency membolehkan pengendalian pelbagai tugas seolah -olah pada masa yang sama, walaupun tidak semestinya secara serentak. Goroutine, benang ringan Go, dicipta menggunakan kata kunci go
, membolehkan operasi serentak. Saluran memudahkan komunikasi dan penyegerakan antara goroutine, membolehkan pertukaran data. Menghantar data penggunaan ch <- value
, semasa menerima penggunaan value := <- ch
.
Contoh tarik docker seperti menunjukkan konsep-konsep ini:
package main import ( "fmt" "math/rand" "os" "strconv" "sync" "time" ) func main() { rand.Seed(time.Now().UnixNano()) concurrency, _ := strconv.Atoi(os.Args[1]) // Get concurrency level from command line if concurrency <= 0 { concurrency = 100 // Default concurrency } progress := make([]int, concurrency) var mu sync.Mutex var wg sync.WaitGroup wg.Add(concurrency) for i := 0; i < concurrency; i++ { go func(idx int) { defer wg.Done() for progress[idx] < 100 { mu.Lock() if progress[idx] >= 100 { mu.Unlock() break } inc := rand.Intn(10) + 1 progress[idx] += inc if progress[idx] > 100 { progress[idx] = 100 } mu.Unlock() time.Sleep(time.Duration(rand.Intn(400)+100) * time.Millisecond) } }(i) } done := make(chan struct{}) go func() { wg.Wait() close(done) }() <-done // Wait for all goroutines to complete fmt.Println("Progress:", progress) }
Program ini menyerupai tugas serentak. Setiap Goroutine mengemas kini kemajuannya sehingga selesai. Mutex memastikan keselamatan benang apabila mengemas kini nilai kemajuan bersama. A Waitgroup Menyegerakkan Penyelesaian Goroutine.
untuk penciptaan goroutine dan pemprosesan serentak. Ia menunjukkan bagaimana Goroutine mengendalikan pelbagai petunjuk kemajuan secara serentak.
Pembelajaran Utama Contohnya menyoroti penggunaan kata kunciEksplorasi lanjut
(kenaikan/penurunan kaunter dan menyekat dengan
go
Eksplorasi ini menimbulkan persoalan mengenai fungsi), mutexes (mencegah keadaan perlumbaan), dan akibat menghilangkannya. Bendera
untuk mengesan keadaan perlumbaan menjamin siasatan lanjut.Atas ialah kandungan terperinci Concurrency, Goroutines, dan Saluran Di GO: Kajian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!