跳转至

Goroutine 与 Channel:并发的最小模型

goroutine 是由 Go 运行时调度的轻量并发执行单元,使用 go 关键字启动。channel 用于在 goroutine 间传递类型化数据和同步。

func square(input <-chan int, output chan<- int) {
    for value := range input {
        output <- value * value
    }
    close(output)
}

<-chan int 表示只接收 channel,chan<- int 表示只发送 channel。明确方向能让编译器帮助限制误用。

不要用 sleep 等待并发完成

应使用 channel、sync.WaitGroupcontext 协调完成和取消,而不是猜测“睡几秒应该够了”。无缓冲 channel 的发送和接收会彼此同步;缓冲 channel 只是在缓冲未满时允许发送先继续执行,并不自动解决生命周期管理。

并发不是默认优化。先写出正确的串行版本;只有任务独立、资源允许且能够处理取消、错误和共享数据时,再引入并发。

参考

评论