Junior — Middle
Kuidas realiseeritakse konkurents, asünkroonsus ja paralleelsus Go keeles?
sobes.tech AI
Vastus AI-lt
Go keeles konkurents, asünkroonsus ja paralleelsus realiseeritakse gorutinate ja kanalite abil.
- Gorutined — need on kerge niidid, mis käivituvad võtmesõnaga
go. Need võimaldavad funktsioone asünkroonselt täita ja ressursi eest võistelda. - Kanalid — kasutatakse turvaliseks andmevahetuseks gorutinate vahel, tagades sünkroniseerimise ja sõnumite edastamise.
Paralleelsus saavutatakse, käivitades mitu gorutinat, mis võivad samaaegselt töötada mitmel protsessori tuumal, kui on määratud GOMAXPROCS.
Näide:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Tööline %d lõpetas", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // käivitame gorutina
}
for i := 1; i <= 3; i++ {
msg := <-ch // saame tulemuse kanalilt
fmt.Println(msg)
}
}
Seega pakub Go lihtsaid ja tõhusaid vahendeid konkurentsi ja paralleelsusega töötamiseks.