Junior — Middle
Məhdud giriş olan kanala qeydiyyat mexanizmi necə işləyir və bu zaman nə baş verir?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, məhdud tutuma malik kanal (bufferli kanal) sabit ölçülü bufferə malikdir. chan <- value əməliyyatı ilə kanala məlumat yazıldıqda, aşağıdakı baş verir:
- Əgər kanalın bufferində boş yer varsa, dəyər bufferə yerləşdirilir və yazma əməliyyatı dərhal tamamlanır.
- Əgər buffer doludursa, yazma əməliyyatı bloklanır və kimsə kanaldan dəyər oxuyana qədər gözləyir və yer açılır.
Beləliklə, məhdud bufferli kanal goroutinlər arasında sinxronizasiya təmin edir: aşırı yüklənmə zamanı yazma bloklanır, və boş bufferdə oxuma bloklanır.
Nümunə:
ch := make(chan int, 2) // 2 elementlik buffer
ch <- 1 // yazır, buffer: [1]
ch <- 2 // yazır, buffer: [1, 2]
// ch <- 3 // bloklanır, buffer doludur
fmt.Println(<-ch) // 1-i oxuyur, buffer: [2]
ch <- 3 // indi yazma uğurlu olacaq
Beləliklə, məhdud girişli kanalda yazma mexanizmi məlumat axını üzərində nəzarət təmin edir və bufferin daşmasını qarşısını alır.