Go programos ir kanalai pagerina įvesties / išvesties našumą keliais būdais:
1. Sugretinimas:
- Goroutines: Goroutines yra lengvos, nepriklausomai vykdančios funkcijos, leidžiančios vienu metu vykdyti užduotis neužblokuojant pagrindinio programos vykdymo srauto. Tai leidžia efektyviai tvarkyti I/O operacijas vienu metu.– Kanalai: kanalai yra saugus ir efektyvus būdas perduoti duomenis tarp gorutinų ir koordinuoti jų vykdymą. Taip užtikrinama, kad duomenys būtų perduodami teisingai ir programa juos tinkamai tvarko.
2. Atminties efektyvumas:
– Goroutines: „Goroutines“ minimalus dėklo dydis yra 2 KB, o tai yra naudinga atminčiai. Tai reiškia, kad juos galima efektyviai valdyti be didelių atminties išlaidų.3. Užduočių planavimas:
– Work Stealing: „Go“ naudoja darbo vagystę, kai neveikiantis procesorius nuolat nori pavogti kitas procesoriaus gijas. Šis metodas sumažina konteksto perjungimo operacijų dažnumą, todėl sumažėja papildomų išlaidų.4. Klaidų tvarkymas:
- Klaidų tvarkymas: įdiegus patikimus klaidų apdorojimo mechanizmus, užtikrinama, kad klaidos būtų skleistos teisingai ir jas tinkamai tvarkytų programa. Tai užtikrina, kad įvesties / išvesties operacijos būtų atliekamos efektyviai ir teisingai.5. Buferiniai kanalai:
- Buferiniai kanalai: naudojant buferinius kanalus galima efektyviai tvarkyti įvesties / išvesties operacijas, laikinai saugojant duomenis. Tai sumažina įvesties / išvesties operacijų išlaidas ir pagerina našumą.6. Lygiagretumo apribojimas:
- Lygiagretumo ribojimas: lygiagretumo ribojimo metodų, pvz., semaforų, naudojimas užtikrina, kad tuo pačiu metu atliekamų įvesties / išvesties operacijų skaičius neviršytų tam tikros ribos. Taip išvengiama resursų perkrovos ir užtikrinamas efektyvus I/O operacijų valdymas.7. Goroutine Pool:
- Goroutine Pool: naudojant gorutinų baseiną užtikrinama, kad gorutinos būtų efektyviai valdomos ir naudojamos pakartotinai. Tai sumažina gorutinų kūrimo ir valdymo išlaidas, pagerina įvesties / išvesties našumą.8. Konteksto tvarkyklė:
- Konteksto tvarkyklė: konteksto tvarkyklės įdiegimas užtikrina, kad I/O operacijos būtų tinkamai valdomos ir koordinuojamos. Tai užtikrina, kad įvesties / išvesties operacijos būtų atliekamos efektyviai ir teisingai.9. AIO (asinchroninė įvestis/išvestis):
- AIO: naudojant AIO užtikrinama, kad įvesties / išvesties operacijos būtų atliekamos asinchroniškai, sumažinant įvesties / išvesties operacijų išlaidas ir pagerinant našumą.10. Optimizuotas planuotojas:
- Optimizuotas planuoklis: „Go“ planuoklis optimizuotas efektyviam įvesties / išvesties operacijoms tvarkyti. Tai užtikrina, kad įvesties / išvesties operacijos būtų atliekamos efektyviai ir teisingai.Šios „Go“ strategijos ir metodai pagerina įvesties / išvesties našumą, nes sumažina pridėtines išlaidas, padidina lygiagretumą ir užtikrina veiksmingą įvesties / išvesties operacijų valdymą.
Citatos:[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/