Sobes.tech
Junior — Middle

Jak je zajištěna práce a synchronizace vláken provádění v Golang?

sobes.tech AI

Odpověď od AI

在Go语言中,使用goroutines(轻量级线程,由Go的运行时管理)来处理执行流。goroutines通过在函数调用前加上go关键字启动,从而实现异步执行。

为了同步goroutines,使用通道(channels)和sync包中的原语(如MutexWaitGroup)。通道提供了goroutines之间安全的数据交换,并允许它们同步。

使用goroutines和通道的示例:

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("goroutine的工作:", msg)
}

这里,主goroutine启动了worker在一个单独的goroutine中,经过延迟后向通道发送消息。主goroutine等待接收通道中的消息,从而实现同步。