Go语言实战-并发
线程与进程
进程是个容器,其存放内存地址空间、文件和设备的句柄、线程等等。线程是个执行空间,这个空间会被操作系统调度来执行代码。

Goroutine运作方式
运行一个goroutine:
- 将这个goroutine放在调度器全局的运行队列上。
- 调度器将队列中的goroutine分配给一个逻辑处理器,逻辑处理器都绑定在单个线程上。
- goroutine会被放到逻辑处理器的本地运行队列中,等待执行。
goroutine遇到阻塞:
- 线程阻塞,等待操作系统返回。线程和正在运行的goroutine会从逻辑处理器上分离。
- 调度器会创建一个新线程,并将其绑定到之前的逻辑处理器上。
- 调度器会从本地运行队列选择goroutine继续执行。

并行与并发
并行是让不同的代码片段同时在不同的物理处理器上执行。
并发是同时管理很多事情,这些事情可能做一半就被暂停去做别的事情了。