协程
首先要把协程与线程、进程区别开。
线程也成为内核级线程,而协程被称为用户级线程。
其最大的特点就是并不用像线程、进程那样进行抢占式调度,它进行的是协作式调度。
协程它并不能做到强制把CPU控制权切换至别的线程,但是它可以主动将CPU控制权转让出去。
goroutine
其本质是协程,但是与协程有有一点不同。
Golang在runtime,系统调度等方面做了相应的处理,避免了某一个goroutine占用CPU太长时间。
goroutine作为协程有着不少优势:
- 内存消耗少,以KB为单位,而线程呢,是要以MB为单位。
- 切换调度开销少,goroutine它仅有3个寄存器修改值。
这些也正是Golang在后端火起来的重要原因,它能是要网络高并发特性。