Puskuroimattomien kanavien käytön mahdollisia haittoja suurissa sovelluksissa ovat:
1. Synkronointipisteet: Puskuroimattomat kanavat luovat synkronointipisteitä, joissa gorutiinien on odotettava toistensa valmistumista. Tämä voi johtaa peräkkäiseen suoritukseen, mikä ei ehkä ole toivottavaa laajamittaisessa sovelluksessa, jossa rinnakkaisuus on välttämätöntä[1][3][5].
2. Piilotetut kilpailuolosuhteet: Puskuroimattomat kanavat voivat piilottaa kilpailuolosuhteet, joita esiintyisi nollaa suuremmalla puskurilla. Tämä tarkoittaa, että jos sinun on lisättävä puskurin kokoa suorituskykysyistä, sinun on yhtäkkiä ratkaistava joukko kilpailuolosuhteita, mikä voi olla eräänlainen tekninen velka[1].
3. Esto: Puskuroimattomat kanavat estävät sekä lähettäjän että vastaanottajan, kunnes toinen puoli on valmis. Tämä voi johtaa suorituskykyongelmiin, jos vastaanottaja on hitaampi kuin lähettäjä tai jos kanavasta kilpailee monia gorutiineja[2][3][5].
4. Rajoitettu skaalautuvuus: Puskuroimattomat kanavat voivat rajoittaa sovelluksesi skaalautuvuutta, koska ne luovat pullonkaulan, jossa gorutiinien on odotettava toistensa valmistumista. Tämä voi johtaa tilanteeseen, jossa sovellus ei hyödynnä täysin käytettävissä olevia prosessoriresursseja[1][3][5].
5. Monimutkaisuus: Puskuroimattomat kanavat voivat monimutkaistaa sovellustasi, koska ne vaativat huolellista hallintaa sen varmistamiseksi, ettei gorutiineja estä loputtomiin. Tämä voi johtaa vaikeampaan virheenkorjaukseen ja ylläpitoon[1][3][5].
6. Suorituskyky: Puskuroimattomat kanavat voivat vaikuttaa suorituskykyyn, koska ne aiheuttavat lisäkustannuksia gorutiineille, jotka odottavat toisiaan. Tämä voi johtaa hitaampiin vasteaikoihin ja pienempään suorituskykyyn[2][3][5].
7. Virheiden käsittely: Puskuroimattomat kanavat voivat vaikeuttaa virheiden käsittelyä, koska ne voivat johtaa lukkiutumiseen, jos gorutiineja ei ole synkronoitu kunnolla. Tämä voi johtaa monimutkaisempaan virheiden käsittelyyn ja virheenkorjaukseen[1][3][5].
Yhteenvetona voidaan todeta, että vaikka puskuroimattomat kanavat voivat olla hyödyllisiä tietyissä tilanteissa, ne voivat myös tuoda mukanaan merkittäviä haittoja laajamittaisessa sovelluksessa. On tärkeää harkita huolellisesti kompromisseja ja valita sopiva kanavatyyppi sovelluksesi erityisvaatimusten perusteella.
Lainaukset:[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/