Go语言实战-并发

线程与进程

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

进程与线程

Goroutine运作方式

运行一个goroutine:

  1. 将这个goroutine放在调度器全局的运行队列上。
  2. 调度器将队列中的goroutine分配给一个逻辑处理器,逻辑处理器都绑定在单个线程上。
  3. goroutine会被放到逻辑处理器的本地运行队列中,等待执行。

goroutine遇到阻塞:

  1. 线程阻塞,等待操作系统返回。线程和正在运行的goroutine会从逻辑处理器上分离。
  2. 调度器会创建一个新线程,并将其绑定到之前的逻辑处理器上。
  3. 调度器会从本地运行队列选择goroutine继续执行。

Goroutine运作方式

并行与并发

并行是让不同的代码片段同时在不同的物理处理器上执行。

并发是同时管理很多事情,这些事情可能做一半就被暂停去做别的事情了。