Junior — Middle
Məlumatların ötürülməsi necə bufferlənməyən kanal vasitəsilə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, qeyri-bufferli kanal (buffersiz kanal) goroutinlar arasında sinxron məlumat ötürməsini təmin edir. Bu, bir dəyəri kanala göndərməyin, başqa bir goroutine bu dəyəri kanaldan qəbul edənə qədər bloklanacağı və əksinə — qəbulun, oxumaq üçün dəyər olana qədər bloklanacağı anlamına gəlir.
Beləliklə, qeyri-bufferli kanal vasitəsilə məlumat ötürməsi, göndərən və alan arasında sinxronizasiya ilə baş verir və aralıq yaddaş olmadan məlumat mübadiləsini təmin edir.
Nümunə:
ch := make(chan int) // qeyri-bufferli kanal
go func() {
ch <- 42 // göndərmə, kimsə oxumazsa bloklanır
}()
value := <-ch // qəbul, dəyər görünənə qədər icra bloklanır
fmt.Println(value) // 42 göstərəcək
Bu nümunədə, goroutine kanala bir ədəd göndərir və əsas goroutine bu ədədi oxuyana qədər bloklanır.