Sobes.tech
Junior — Middle

Kedy presne dôjde k blokáde pri použití kanála s veľkosťou 100 prvkov?

sobes.tech AI

Odpoveď od AI

V Go, kanál s veľkosťou bufferu 100 prvkov znamená, že do neho môžete odoslať až 100 hodnôt bez blokovania odosielateľa.

Blokovanie nastane v momente, keď buffer kanála už obsahuje 100 prvkov a gorutina, ktorá odosiela, sa pokúsi odoslať 101. prvok. Pretože je buffer plný, odoslanie bude zablokované, kým niekto neprečíta aspoň jeden prvok z kanála.

Príklad:

ch := make(chan int, 100)

// Vyplníme kanál
for i := 0; i < 100; i++ {
    ch <- i // nezablokuje sa
}

// Nasledujúce odoslanie sa zablokuje, kým nebude prečítaný jeden prvok
ch <- 101 // zablokuje sa

Týmto spôsobom dochádza k blokovaniu pri pokuse odoslať prvok do plného bufferu kanála.