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.
Pembelajaran Utama
Contohnya menyoroti penggunaan kata kunci
go
Eksplorasi ini menimbulkan persoalan mengenai fungsi
Atas ialah kandungan terperinci Concurrency, Goroutines, dan Saluran Di GO: Kajian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!