Sobes.tech
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.