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.