Junior
Go-da bufferli və buffersiz kanallar arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Buffersizsiz kanallar məlumatların göndərilməsi və alınmasının sinxron baş verməsini tələb edir. Göndərən məlumatları qəbul etməyə hazır olanadək bloklanır və əksinə. Onların buffer ölçüsü sıfırdır.
Bufferli kanallar sonlu buffer ölçüsünə malikdir. Göndərən yalnız buffer dolduqda bloklanır və qəbul edən buffer boş olduqda.
// Buffersiz kanal
unbufferedChan := make(chan int)
// Buffer ölçüsü 5 olan bufferli kanal
bufferedChan := make(chan int, 5)
| Xüsusiyyət | Buffersiz kanal | Bufferli kanal |
|---|---|---|
| Buffer ölçüsü | 0 | > 0 |
| Sinxronizasiya | Sinxron qarşılıqlı əlaqə | Buffer dolu/boş olmadan asinxron |
| Göndərənin bloklanması | Qəbul edən qəbul edəndə | Buffer dolduqda |
| Qəbul edən bloklanması | Göndərən göndərəndə | Buffer boşaldıqda |
Buffersiz kanallar goroutine-lərin sinxronizasiyası və mesajların itirilməməsi üçün istifadə olunur. Bufferli kanallar bloklamaları azaltmaq üçün istifadə olunur, göndərən işləməyə davam edə bilər, qəbul edən isə hələ hazır deyilsə, və ya əksinə.