Puhverdamata kanalite kasutamise võimalikud puudused suuremahulistes rakendustes on järgmised:
1. Sünkroonimispunktid: puhverdamata kanalid loovad sünkroonimispunkte, kus gorutiinid peavad üksteise lõpuleviimist ootama. See võib viia järjestikuse täitmiseni, mis ei pruugi olla soovitav suuremahulistes rakendustes, kus paralleelsus on hädavajalik[1][3][5].
2. Varjatud võidusõidu tingimused: puhverdamata kanalid võivad peita võistlustingimused, mis tekivad nullist suurema puhvri suuruse korral. See tähendab, et kui teil on jõudluse huvides vaja puhvrit suurendada, peate ootamatult lahendama hulga võistlustingimusi, mis võib olla tehnilise võla vorm[1].
3. Blokeerimine: puhverdamata kanalid blokeerivad nii saatja kui ka vastuvõtja, kuni teine pool on valmis. See võib põhjustada jõudlusprobleeme, kui vastuvõtja on saatjast aeglasem või kui kanali pärast konkureerivad paljud gorutiinid[2][3][5].
4. Piiratud skaleeritavus: puhverdamata kanalid võivad piirata teie rakenduse skaleeritavust, kuna need loovad kitsaskoha, kus gorutiinid peavad teineteise lõpetamist ootama. See võib viia olukorrani, kus rakendus ei kasuta täielikult ära saadaolevaid protsessori ressursse[1][3][5].
5. Keerukus: puhverdamata kanalid võivad teie rakendust keerulisemaks muuta, kuna need nõuavad hoolikat haldamist, et tagada, et gorutiinid ei oleks lõputult blokeeritud. See võib raskendada silumist ja hooldust[1][3][5].
6. Toimivus: puhverdamata kanalid võivad jõudlust mõjutada, kuna need tekitavad gorutiinidele teineteise ootamiseks lisakoormust. See võib kaasa tuua aeglasema reageerimisaja ja vähenenud läbilaskevõime[2][3][5].
7. Veakäsitlus: puhverdamata kanalid võivad vigade käsitlemise keerulisemaks muuta, kuna need võivad viia ummikseisuni, kui gorutiinid pole korralikult sünkroonitud. See võib viia keerukama veakäsitluse ja silumiseni[1][3][5].
Kokkuvõttes võib öelda, et kuigi puhverdamata kanalid võivad teatud olukordades kasulikud olla, võivad need tuua kaasa ka suuremahuliste rakenduste puhul olulisi puudusi. Oluline on hoolikalt kaaluda kompromisse ja valida sobiv kanali tüüp, mis põhineb teie rakenduse spetsiifilistel nõuetel.
Tsitaadid:[1] https://www.reddit.com/r/golang/comments/9cqcx4/help_understanding_the_use_cases_and_pitfalls_of/
[2] https://www.linkedin.com/pulse/buffered-unbuffered-channels-golang-lucas-schenkel-schieferdecker
[3] https://www.scaler.com/topics/golang/buffered-and-unbuffered-channel-in-golang/
[4] https://clavinjune.dev/en/blogs/buffered-vs-unbuffered-channel-in-golang/
[5] https://notes.shichao.io/gopl/ch8/