Sobes.tech
Back to questions
Junior — Middle
78

Каким образом в Golang обеспечивается работа и синхронизация потоков выполнения?

Companies where asked
МТСМТС

Answer from AI

sobes.tech AI

В Go для работы с потоками выполнения используются горутины (goroutines) — легковесные потоки, управляемые рантаймом Go. Горутины запускаются с помощью ключевого слова go перед вызовом функции, что позволяет выполнять её асинхронно.

Для синхронизации горутин в Go применяются каналы (channels) и примитивы из пакета sync (например, Mutex, WaitGroup). Каналы обеспечивают безопасный обмен данными между горутинами и позволяют синхронизировать их работу.

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

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "готово"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Работа горутины:", msg)
}

Здесь основная горутина запускает worker в отдельной горутине, которая после задержки отправляет сообщение в канал. Основная горутина ждёт получения сообщения из канала, что обеспечивает синхронизацию.