"并发不是并行,但使并行成为可能。" —— Rob Pike
本文将深入探讨Go中的一些高级并发模式。Go以其内置的并发原语而闻名,理解这些模式可以帮助我们编写更高效、可扩展的应用程序。
1. 基础Goroutine
goroutine是由Go运行时管理的轻量级线程。要启动一个goroutine,只需在函数前使用go关键字。
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello from a goroutine!")
}
func main() {
go sayHello() // This starts a new goroutine.
time.Sleep(1 * time.Second) // Give goroutine some time to execute.
}
在本例中,sayHello函数与main函数并发运行。
2. Channel和Select
channel用于在程序之间进行通信,同步执行并确保数据安全。
(1) 基础channel示例
package main
import "fmt"
func main() {
message := make(chan string) // create a new channel
go func() { // start a goroutine
message