> For the complete documentation index, see [llms.txt](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/09.0.md).

# 9 并发-Goroutines,Channel和Pipeline

上一章我们讨论了Go系统编程，包括Go函数和与操作系统通信的技术。前一章未涉及的两个系统编程领域是并发编程以及创建和管理多个线程。这两个主题将在本章和下一章中讨论。

GO提供了自己独特而新颖的方式来实现并发，这就是协程和通道。协程Goroutine是Go程序中可独立执行的最小实体单元，而通道Channel是Goroutine间并发且有效地获取数据的方式，从而允许goroutine具有引用点并相互通信。Go中的所有内容都是使用goroutines执行的，这是完全合理的，因为Go是一种并发编程语言。因此，当Go程序开始执行时，它的单个goroutine调用main（）函数，该函数执行实际的程序。

本章的主要内容如下：

* 进程，线程和Go协程之间的区别
* Go调度器
* 并发与并行
* 创建Go协程
* 创建通道
* 从通道读取或接收数据
* 往通道里写或发送数据
* 创建管道
* 等待你的Go协程结束
