Sobes.tech
Junior — Middle

Kas on võimalik täielikult paralleelne ülesannete töötlemine Go keeles?

sobes.tech AI

Vastus AI-lt

Jah, Go keeles on võimalik täielikult rakendada ülesannete paralleelset töötlemist. Go pakub sisseehitatud konkurentsi tuge goroutine'ide kaudu, mis on kergekaalulised niidid, mida haldab Go jooksukeskkond.

Goroutine'id võimaldavad funktsioone paralleelselt käivitada, ning kanalid (channels) tagavad nende vahel turvalise andmevahetuse.

Paralleelse töötlemise näide:

package main

import (
    "fmt"
    "time"
)

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        fmt.Printf("Tööline %d töötleb ülesannet %d\n", id, j)
        time.Sleep(time.Second) // töö simulatsioon
        results <- j * 2
    }
}

func main() {
    jobs := make(chan int, 5)
    results := make(chan int, 5)

    for w := 1; w <= 3; w++ {
        go worker(w, jobs, results)
    }

    for j := 1; j <= 5; j++ {
        jobs <- j
    }
    close(jobs)

    for a := 1; a <= 5; a++ {
        fmt.Println("Tulemus:", <-results)
    }
}

Sellest tulenevalt võimaldab Go tõhusalt rakendada paralleelset töötlemist minimaalsete pingutustega.