首页 > Golang 线程和协程的区别

Golang 线程和协程的区别

Golang 线程和协程的区别


题主的意思应该是:goroutine 和协程的区别 吧?

备注:需要区分进程、线程(内核级线程)、协程(用户级线程)三个概念。

1. 进程、线程、协程概念性区别

2. goroutine 和协程区别

本质上,goroutine 就是协程。 不同的是,Golang 在 runtime、系统调用等多方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或者进行系统调用时,会主动把当前 goroutine 的CPU (P) 转让出去,让其他 goroutine 能被调度并执行,也就是 Golang 从语言层面支持了协程。

3. 其他方面不同

每个 goroutine (协程) 默认占用内存远比 Java 、C 的线程少。
goroutine: 2KB
线程: 8MB

线程/goroutine 切换开销方面,goroutine 远比线程小
线程: 涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP...等寄存器的刷新等。
goroutine: 只有三个寄存器的值修改 - PC / SP / DX.


线程是操作系统调度的, 抢占式的.
协程是应用自己调度的.

【热门文章】
【热门文章】