Go 语言并发编程指南

+

什么是并发编程

并发编程是指程序中包含多个独立的执行流,它们可以同时运行并协同工作。Go 语言从设计之初就对并发提供了原生支持。

Goroutine

Goroutine 是 Go 语言中最基本的并发单元。它是由 Go 运行时管理的轻量级线程。

package main

import (
    "fmt"
    "time"
)

func sayHello(name string) {
    for i := 0; i < 5; i++ {
        fmt.Printf("Hello, %s! (%d)\n", name, i)
        time.Sleep(100 * time.Millisecond)
    }
}

func main() {
    go sayHello("World")
    go sayHello("Go")
    time.Sleep(1 * time.Second)
}

Channel

Channel 是 goroutine 之间通信的管道。

ch := make(chan int)

// 发送数据
go func() {
    ch <- 42
}()

// 接收数据
value := <-ch
fmt.Println(value) // 输出: 42

Select 语句

select 语句让一个 goroutine 可以等待多个通信操作。

select {
case msg1 := <-ch1:
    fmt.Println("received", msg1)
case msg2 := <-ch2:
    fmt.Println("received", msg2)
case <-time.After(time.Second):
    fmt.Println("timeout")
}

总结

Go 的并发模型基于 CSP (Communicating Sequential Processes) 理念:

  • Goroutine:轻量级执行流
  • Channel:安全的通信机制
  • Select:多路复用

不要通过共享内存来通信,而应该通过通信来共享内存。