Sobes.tech
Junior — Middle

Как се реализира паралелната и последователната обработка на задачи в езика Go?

sobes.tech AI

Отговор от AI

В Go паралелната обработка на задачи се реализира чрез горутините, които са леки нишки, стартирани с ключовата дума go. Може да стартирате горутина за изпълнение на функция асинхронно, и тя ще работи паралелно с други горутини.

Последователната обработка е просто извикване на функции без go, когато задачите се изпълняват една след друга.

Пример за паралелна обработка:

package main

import (
    "fmt"
    "time"
)

func задача(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 задача(i) // стартираме горутина
    }
    time.Sleep(2 * time.Second) // изчакваме завършването на горутините
}

В този пример три задачи се стартират паралелно. Ако премахнем go, задачите ще се изпълняват последователно.

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