Junior — Middle
Kanalda buffer istifadə etmədən eyni zamanda məlumatların yazılması mümkündürmü?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da kanallarər bufferli və buffersiz ola bilər. Buffersiz kanalda yazma (göndərmə) başqa bir gorutina kanaldan dəyəri oxuyana qədər bloklanır.
Buffersiz kanalda eyni vaxtda yazmaq mümkün deyil, çünki göndərmə qəbul edilənə qədər bloklanır və yalnız bir göndərən eyni zamanda məlumat ötürə bilər.
Bloklamadan eyni vaxtda yazmaq lazımdırsa, bufferli kanallar istifadə olunur, burada göndərən məlumatı bufferə yerləşdirə bilər və dərhal qəbul etməyi gözləməz.
Buffersiz kanal nümunəsi:
ch := make(chan int) // buffersiz kanal
// Göndərmə, kimsə oxuyana qədər bloklanır
ch <- 1
Bloklamadan eyni vaxtda yazmaq üçün buffer lazımdır:
ch := make(chan int, 2) // 2 elementlik buffer
ch <- 1 // bloklanmır
ch <- 2 // bloklanmır
Qısaca: buffer olmasa, eyni vaxtda yazmaq mümkün deyil.