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

进程+线程+协程

作者: 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