Groutiny a kanály v Go zlepšujú výkon I/O niekoľkými spôsobmi:
1. Súbežnosť:
- Goroutines: Goroutines sú ľahké, nezávisle sa vykonávajúce funkcie, ktoré umožňujú súbežné vykonávanie úloh bez blokovania hlavného toku vykonávania programu. To umožňuje efektívne zvládanie I/O operácií súčasne.- Kanály: Kanály poskytujú bezpečný a efektívny spôsob odovzdávania údajov medzi goroutinami a koordinácie ich vykonávania. To zaisťuje, že sa údaje šíria správne a aplikácia s nimi správne zaobchádza.
2. Účinnosť pamäte:
- Goroutiny: Goroutíny majú minimálnu veľkosť zásobníka 2 kB, čo je šetrné k pamäti. To znamená, že ich možno efektívne spravovať bez výraznej réžie pamäte.3. Plánovanie úloh:
- Krádež práce: Go využíva kradnutie práce, pri ktorom sa nečinný procesor neustále snaží ukradnúť ďalšie vlákna procesora. Tento prístup znižuje frekvenciu operácií prepínania kontextu, čo vedie k menšej réžii.4. Ošetrenie chýb:
- Ošetrenie chýb: Implementácia robustných mechanizmov spracovania chýb zaisťuje, že sa chyby šíria správne a že ich aplikácia primerane spracováva. To zaisťuje efektívne a správne spracovanie I/O operácií.5. Kanály s vyrovnávacou pamäťou:
- Kanály s vyrovnávacou pamäťou: Používanie kanálov s vyrovnávacou pamäťou umožňuje efektívne spracovanie I/O operácií dočasným ukladaním údajov do vyrovnávacej pamäte. To znižuje réžiu I/O operácií a zlepšuje výkon.6. Obmedzenie súbežnosti:
- Obmedzenie súbežnosti: Použitie techník na obmedzenie súbežnosti, ako sú semafory, zaisťuje, že počet súbežných I/O operácií neprekročí určitý limit. To zabraňuje preťaženiu zdrojov a zaisťuje efektívne spracovanie I/O operácií.7. Goroutine Pool:
- Goroutine Pool: Použitie goroutine poolu zaisťuje efektívne spravovanie a opätovné použitie goroutines. To znižuje réžiu vytvárania a spravovania gorutín a zlepšuje výkon I/O.8. Kontextový manažér:
- Context Manager: Implementácia kontextového manažéra zaisťuje, že I/O operácie sú správne riadené a koordinované. To zaisťuje efektívne a správne spracovanie I/O operácií.9. AIO (Asynchrónne I/O):
- AIO: Používanie AIO zaisťuje, že I/O operácie sa vykonávajú asynchrónne, čím sa znižuje réžia I/O operácií a zvyšuje sa výkon.10. Optimalizovaný plánovač:
- Optimalizovaný plánovač: Plánovač Go je optimalizovaný pre efektívne spracovanie I/O operácií. To zaisťuje efektívne a správne spracovanie I/O operácií.Tieto stratégie a techniky v Go zlepšujú výkon I/O znížením réžie, zvýšením súbežnosti a zabezpečením efektívneho spracovania I/O operácií.
Citácie:[1] https://granulate.io/blog/deep-dive-into-golang-performance/
[2] https://clouddevs.com/go/concurrent-file-in-out/
[3] https://pages.cs.wisc.edu/~riccardo/assets/diskio.pdf
[4] https://groups.google.com/g/golang-nuts/c/kfvPQOwCRLU
[5] https://coffeebytes.dev/en/go-use-of-channels-to-communicate-goroutines/