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.