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 в отдельной горутине, которая после задержки отправляет сообщение в канал. Основная горутина ждёт получения сообщения из канала, что обеспечивает синхронизацию.