Golang之协程的用法讲解.pdfVIP

  • 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)

1亿VIP精品文档

相关文档