Sobes.tech
Junior — Middle

Hogyan lehet megelőzni a blokkolási helyzetet nem pufferelt csatornák használata esetén több szálas programozásban?

sobes.tech MI

Válasz az MI-től

A Go-ban nem bufferelt csatornák használatakor blokkolások elkerülése érdekében:

  • Goroutine-okat használhatunk az adatok egyidejű küldésére és fogadására, hogy ne várakozzon egymásra a küldő vagy a fogadó.
  • Alkalmazhatunk select-et defaulttel, hogy elkerüljük a blokkolást, ha a csatorna nem kész az műveletre.
  • Használhatunk bufferelt csatornákat, ha lehetséges, hogy csökkentsük a blokkolások valószínűségét.

Példa select és default használatával:

select {
case ch <- value:
    // sikeres küldés
case val := <-ch:
    // sikeres fogadás
default:
    // sem küldés, sem fogadás nem kész — elkerülve a blokkolást
}