Junior — Middle
Ako sa v jazyku Go implementuje konkurencia, asynchronita a paralelita?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa konkurencia, asynchrónia a paralelizmus implementujú pomocou gorutín a kanálov.
- Gorutiny sú ľahké vlákna, ktoré sa spúšťajú pomocou kľúčového slova
go. Umožňujú asynchrónne vykonávanie funkcií a súťaž o zdroje. - Kanály sa používajú na bezpečnú výmenu dát medzi gorutinami, zabezpečujú synchronizáciu a prenos správ.
Paralelizmus sa dosahuje spustením viacerých gorutín, ktoré môžu bežať súčasne na viacerých jadrách procesora, ak je nastavené GOMAXPROCS.
Príklad:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Pracovník %d hotový", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // spustíme gorutinu
}
for i := 1; i <= 3; i++ {
msg := <-ch // prijímame výsledok z kanála
fmt.Println(msg)
}
}
Takto Go poskytuje jednoduché a efektívne nástroje na prácu s konkurenciou a paralelizmom.