Sobes.tech
Назад к вопросам
Junior — Middle
82

Каким образом можно организовать и управлять последовательностью выполнения потоков?

Ответ от нейросети

sobes.tech AI

В Go для организации и управления последовательностью выполнения потоков (горутин) используются несколько основных механизмов:

  1. Каналы (channels) — позволяют синхронизировать горутины, передавая данные между ними. Горутинa, читающая из канала, будет ждать, пока другая горутина не отправит данные, что обеспечивает упорядоченность.

  2. sync.WaitGroup — используется для ожидания завершения группы горутин. Позволяет дождаться, пока все запущенные горутины выполнятся.

  3. Mutex и другие примитивы из пакета sync — для защиты общих ресурсов и предотвращения гонок.

Пример использования каналов для последовательного выполнения:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Worker %d started\n", id)
    // имитация работы
    done <- true // сигнал о завершении
}

func main() {
    done := make(chan bool)

    go worker(1, done)
    <-done // ждем завершения worker 1

    go worker(2, done)
    <-done // ждем завершения worker 2

    fmt.Println("All workers done")
}

Таким образом, используя каналы и синхронизацию, можно управлять порядком выполнения горутин.