Go Goroutine 与 Channel 并发入门
Go Goroutine 与 Channel 并发入门
Go 的并发模型非常轻量。goroutine 负责并发执行,channel 负责协程之间通信。掌握这两个概念,就能写出很多实用的并发程序。
一、启动 goroutine
1 | package main |
go 关键字会启动一个新的 goroutine。需要注意的是,主函数结束后,其他 goroutine 也会随进程退出。
二、使用 channel 等待结果
1 | func main() { |
发送和接收会同步阻塞,这让 channel 很适合表达任务完成、结果返回和生产消费关系。
三、带缓冲 channel
1 | jobs := make(chan int, 10) |
带缓冲 channel 可以暂存一定数量的数据,适合生产者和消费者速度不完全一致的场景。
四、关闭 channel
生产者可以关闭 channel,通知消费者没有更多数据:
1 | close(jobs) |
消费者可以用 range 持续读取:
1 | for job := range jobs { |
五、实践建议
Go 并发写起来很快,但不要滥用 goroutine。每个 goroutine 都应该有明确退出条件。对长期运行的任务,最好配合 context.Context 控制取消,避免泄漏。