Sobes.tech
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.