- 0
- 0
- 约6.22千字
- 约 5页
- 2023-07-03 发布于上海
- 举报
Golang之协程的⽤法讲解
⼀、Golang 线程和协程的区别
备注:需要区分进程、线程(内核级线程)、协程(⽤户级线程)三个概念。
进程、线程和 协程 之间概念的区别
对于进程、线程,都是有内核进⾏调度,有 CPU时间⽚的概念,进⾏抢占式调度(有多种调度算法)
对于协程(⽤户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由⽤户⾃⼰的程序进⾏调度的,因为
是由⽤户程序⾃⼰控制,那么就很难像抢占式调度那样做到强制的 CPU控制权切换到其他进程/线程,通常只能进⾏协作式
调度,需要协程⾃⼰主动把控制权转让出去之后,其他协程才能被执⾏到。
goroutine 和协程区别
本质上,goroutine就是协程。不同的是,Golang在 runtime、系统调⽤等多⽅⾯对 goroutine调度进⾏了封装和处理,当遇
到长时间执⾏或者进⾏系统调⽤时,会主动把当前 goroutine的CPU (P)转让出去,让其他 goroutine能被调度并执⾏,也就
是 Golang从语⾔层⾯⽀持了协程。
Golang的⼀⼤特⾊就是从语⾔层⾯原⽣⽀持协程,在函数或者⽅法前⾯加 go关键字就可创建⼀个协程。
其他⽅⾯的⽐较
1.内存消耗⽅⾯
每个 goroutine (协程)默认占⽤内存远⽐ Java、C的线
原创力文档

文档评论(0)