Sobes.tech
Junior — Middle

Kako je implementirano paralelno i sekvencijalno obavljanje zadataka u jeziku Go?

sobes.tech АИ

Одговор од АИ

У Go, паралелна обрада задата се реализује помоћу горутинa, које су лагани тхреадови који се покрећу помоћу кључне речи go. Могу се покренути за извршавање функције асинхроно, и радиће паралелно са другим горутинaма.

Секвенцијална обрада је једноставно позивање функција без go, када се задатци извршавају један за другим.

Пример паралелне обраде:

package main

import (
    "fmt"
    "time"
)

func zadatak(id int) {
    fmt.Printf("Задатак %d започео\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Задатак %d завршен\n", id)
}

func main() {
    for i := 1; i <= 3; i++ {
        go zadatak(i) // покрећемо горутину
    }
    time.Sleep(2 * time.Second) // чекамо да се горутине заврше
}

У овом примеру, три задатка се покрећу паралелно. Ако уклонимо go, задатци ће се извршавати редом.

За синхронизацију и управљање горутинaма често се користе канали (channels) и sync.WaitGroup.