Junior — Middle
Kaip įgyvendinama užduočių lygiagreti ir sekinė apdorojimas Go kalboje?
sobes.tech AI
Atsakymas iš AI
Go kalboje užduočių paralelinis apdorojimas įgyvendinamas naudojant gorutinas, kurios yra lengvi siūlai, pradedami naudojant raktinį žodį go. Gorutina gali būti paleista vykdyti funkciją asinchroniškai, ir ji veiks paraleliai su kitomis gorutinomis.
Seklinis apdorojimas yra paprastas funkcijų kvietimas be go, kai užduotys vykdomos viena po kitos.
Pavyzdys paraleliniam apdorojimui:
package main
import (
"fmt"
"time"
)
func užduotis(id int) {
fmt.Printf("Užduotis %d pradėta\n", id)
time.Sleep(time.Second)
fmt.Printf("Užduotis %d baigta\n", id)
}
func main() {
for i := 1; i <= 3; i++ {
go užduotis(i) // paleidžiame gorutinas
}
time.Sleep(2 * time.Second) // laukiame gorutinų pabaigos
}
Šiame pavyzdyje trys užduotys pradeda veikti paraleliai. Jei pašalinsime go, užduotys bus vykdomos eilės tvarka.
Gorutinas sinchronizacijai ir valdymui dažnai naudojami kanalai (channels) ir sync.WaitGroup.