Gorutine in kanali v Go izboljšajo V/I zmogljivost na več načinov:
1. Sočasnost:
- Goroutine: Goroutine so lahke, neodvisno izvajajoče se funkcije, ki omogočajo hkratno izvajanje nalog, ne da bi blokirale glavni tok izvajanja programa. To omogoča učinkovito sočasno upravljanje V/I operacij.- Kanali: Kanali zagotavljajo varen in učinkovit način za prenos podatkov med podprogrami in usklajevanje njihovega izvajanja. To zagotavlja, da se podatki pravilno širijo in da jih aplikacija ustrezno obravnava.
2. Učinkovitost pomnilnika:
- Gorutine: Goroutine imajo najmanjšo velikost sklada 2 KB, kar je prijazno do pomnilnika. To pomeni, da jih je mogoče učinkovito upravljati brez večjih stroškov pomnilnika.3. Načrtovanje opravil:
- Kraja dela: Go uporablja krajo dela, ki vključuje nedejaven procesor, ki nenehno išče ukrasti niti drugih procesorjev. Ta pristop zmanjša pogostost operacij preklopa konteksta, kar povzroči manj stroškov.4. Obravnava napak:
- Obravnava napak: Implementacija robustnih mehanizmov za obravnavanje napak zagotavlja, da se napake pravilno širijo in jih aplikacija ustrezno obravnava. To zagotavlja, da se V/I operacije obravnavajo učinkovito in pravilno.5. Buffered Channels:
- Kanali v medpomnilniku: Uporaba kanalov v medpomnilniku omogoča učinkovito upravljanje V/I operacij z začasnim shranjevanjem podatkov v medpomnilnik. To zmanjša stroške V/I operacij in izboljša zmogljivost.6. Omejevanje sočasnosti:
- Omejevanje sočasnosti: uporaba tehnik omejevanja sočasnosti, kot so semaforji, zagotavlja, da število sočasnih V/I operacij ne preseže določene omejitve. To preprečuje preobremenitev virov in zagotavlja učinkovito upravljanje V/I operacij.7. Goroutine Pool:
- Goroutine Pool: uporaba goroutine bazena zagotavlja učinkovito upravljanje in ponovno uporabo goroutin. To zmanjša režijske stroške pri ustvarjanju in upravljanju goroutin, kar izboljša V/I zmogljivost.8. Upravitelj konteksta:
- Upravljalnik konteksta: Implementacija upravitelja konteksta zagotavlja, da so V/I operacije pravilno upravljane in usklajene. To zagotavlja, da se V/I operacije obravnavajo učinkovito in pravilno.9. AIO (asinhroni V/I):
- AIO: uporaba AIO zagotavlja, da se V/I operacije izvajajo asinhrono, kar zmanjša obremenitev V/I operacij in izboljša zmogljivost.10. Optimiziran razporejevalnik:
- Optimiziran razporejevalnik: razporejevalnik Go je optimiziran za učinkovito upravljanje V/I operacij. To zagotavlja, da se V/I operacije obravnavajo učinkovito in pravilno.Te strategije in tehnike v Go izboljšujejo zmogljivost V/I z zmanjšanjem režijskih stroškov, povečanjem sočasnosti in zagotavljanjem učinkovitega ravnanja z operacijami V/I.
Citati:[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/