美文网首页
进程+线程+协程

进程+线程+协程

作者: sharajava | 来源:发表于2018-07-06 20:30 被阅读0次

协程

最早是进程的工作机制,后来被现在抢占式的进程工作机制替代。

目前含义是在线程范围的。

协:是协作的意思。协程:coroutine 是在线程范围内相互协作以进一步提高 CPU 利用率的更细粒度的线程(可以叫作:纤程 fiber) 。

先看看线程和进程的关系

线程的出现是为了在进程的基础上提高 CPU 利用率。

拥有独立资源(CPU 时间和内存地址空间) 的进程如果遇到阻塞(如 IO) 则白白浪费 CPU 时间,什么事也没做。

在进程范围内定义若干线程(共享进程的 CPU 时间和内存空间) ,把进程要做的事情分配给线程去做。一个线程阻塞,就切到其他线程做其他事情。

开销

进程切换开销:

  • 程序计数器
  • 寄存器
  • 变量
  • 页表

线程切换也是有开销的,频繁的切换,开销就比较可观,CPU 被浪费在线程切换上。

线程切换开销:

  • 程序计数器
  • 寄存器
  • 变量

省去开销最大的 页表 切换这一块,开销大大降低。

不过,线程切换与进程切换一样,都需要进行用户态与内核态的转换过程(具体指什么?)。

协程就是在线程内部,几个协程协作,把分配给当前线程的 CPU 时间充分利用起来,不轻易让出 CPU 时间给其他线程,减少线程切换开销,提高工作效率。

一般是 IO 密集型的应用适合协程的使用。

Java

线程状态图

参考

https://www.cnblogs.com/yjf512/p/5593181.html
https://www.zhihu.com/question/20511233

相关文章

网友评论

      本文标题:进程+线程+协程

      本文链接:https://www.haomeiwen.com/subject/tbtljftx.html