{site_name}

{site_name}

🌜 搜索

Go 语言并发是指在同一程序中同时执行多个独立的操作的能力

编程 𝄐 0
go语言的并发,go语言并发编程实战,go语言并行,go语言高并发与微服务实战 下载,go语言chan,go语言并发编程
Go 语言并发是指在同一程序中同时执行多个独立的操作的能力。Go 语言具有内置的并发支持,通过 Goroutine 和 Channel 进行实现。

Goroutine 是 Go 语言中并发的基本单位,它是由 Go 运行时系统管理的轻量级线程,可以和其他 Goroutine 并发运行。可以使用 go 关键字来启动一个新的 Goroutine,例如:


func main() {
go printMsg("Hello")
printMsg("World")
}

func printMsg(msg string) {
fmt.Println(msg)
}


上述代码中,调用 printMsg("Hello") 的语句将被放入一个新的 Goroutine 中运行,而 printMsg("World") 则会在主 Goroutine 中运行。这样两个函数就可以同时运行,因此程序的输出可能是 "World" 和 "Hello" 的任意组合。

Channel 是 Goroutine 之间通信的机制,它允许一个 Goroutine 向另一个 Goroutine 发送数据,并且保证发送和接收操作的同步性。可以使用 make 函数创建一个 Channel,例如:


ch := make(chan int)


这里创建了一个可以传递整数类型数据的 Channel。发送数据可以使用 <- 操作符,例如:


ch <- 123


这里将整数 123 发送到 ch 这个 Channel 中。接收数据也使用 <- 操作符,例如:


x := <- ch


这里从 ch 这个 Channel 中接收一个整数,并将其赋值给变量 x。

下面是一个使用 Goroutine 和 Channel 实现并发的简单示例:


func main() {
ch := make(chan string)
go printMsg("Hello", ch)
go printMsg("World", ch)
msg1 := <- ch
fmt.Println(msg1)
msg2 := <- ch
fmt.Println(msg2)
}

func printMsg(msg string, ch chan string) {
time.Sleep(time.Second)
ch <- msg
}


上述代码中,启动了两个新 Goroutine 分别调用 printMsg 函数,并向同一个 Channel 发送不同的字符串。主 Goroutine 从 Channel 中接收两个字符串,并打印出来。由于 printMsg 函数在执行前等待了一秒钟,因此程序的输出会有一定的延迟。