Golang 之协程详解

  1. 云栖社区>
  2. Golang语言社区>
  3. 博客>
  4. 正文

Golang 之协程详解

技术小能手 2018-11-28 14:49:34 浏览1330
展开阅读全文

一、Golang 线程和协程的区别

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

进程、线程 和 协程 之间概念的区别

对于 进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行 抢占式调度(有多种调度算法)

对于 协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行 协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。

goroutine 和协程区别

本质上,goroutine 就是协程。 不同的是,Golang 在 runtime、系统调用等多方面对goroutine 调度进行了封装和处理,当遇到长时间执行或者进行系统调用时




网友评论

登录后评论
0/500
评论
技术小能手
+ 关注
所属云栖号: Golang语言社区