Sobes.tech
Junior — Middle

Kanalden okuma işlemi tampon kullanmadan mümkün mü?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da, buffer olmayan (chan) kanal okuma işlemi yalnızca kanal tamponluysa mümkündür. Kanal tamponu yoksa (boyut 0), okuma işlemi, kanala bir değer gönderilene kadar engellenir.

Dolayısıyla:

  • Buffer olmayan, bloklamayan okuma için, kanal ile bloklamayan işlemler kullanılmalıdır (örneğin, select ile default kullanarak), ancak bu, veri alımını garanti etmez.
  • Buffer olmayan kanalda, okuma her zaman engellenir, ta ki biri veri gönderene kadar.

Bufferli kanal örneği:

ch := make(chan int, 1) // 1 öğe tamponu
ch <- 42                // değer gönder
val := <-ch             // bloklamadan okuma

Buffer olmayan kanalda, okuma ve yazma doğrudan goroutine'ler arasında senkronize olur.