上一章我们讨论了Go系统编程,包括Go函数和与操作系统通信的技术。系统编程中,前面章节未涉及的两个领域是并发编程以及创建和管理多个线程。这两个主题将在本章和下一章中讨论。
GO提供了自己独特而新颖的方式来实现并发,这就是协程(goroutine
)和通道(channels
)。协程是Go程序中可独立执行的最小实体单元,而通道是协程间并发有效获取数据的方式,这允许协程间具有引用点并可以相互通信。Go中的所有内容都是使用协程执行的,这是完全合理的,因为Go是一种并发编程语言。因此,当Go程序开始执行时,单个协程调用main()
函数,该函数执行实际的程序。
本章的内容和代码都比较简单,你应该可以很容易地理解它们。goroutines
和channels
中更高级的部分留到第10章中。
本章的主要内容如下:
- 进程,线程和Go协程之间的区别
- Go调度器
- 并发与并行
Erlang
和Rust
中的并发模型- 创建Go协程
- 创建通道
- 从通道读取或接收数据
- 往通道里写或发送数据
- 创建管道
- 等待你的Go协程结束