协程
来源:互联网 发布:最新网络手游排行榜 编辑:程序博客网 时间:2024/06/13 02:01
协程
从事软件开发的同学,一般都对进程和线程有一些认识。但协程可能很少遇到或讲到,当然有些语言天生就有协程的使用概念,比如lua、python等。
有人讲,历史上是先有协程的,是OS用来模拟多任务并发。这一点学过OS的应该都能领悟。概念上讲,它是非抢占式的,所以存在多任务时间片使用不公平的问题。就个人理解而言,现在人们通常将,用户态的调度单位称为“协程”,也称作“用户态线程”。进程它与进程、线程的显著差异就是,1)它是非抢占的;2)它的切换不会陷入内核态。
抢占比较好理解,比如:中断抢占、高优先抢占低优先等。
陷入内核。进程和线程的切换都会在切换时陷入内核,它们的调度都是由内核调度完成的。不同的是,进程的切换,倒腾的资源是最多,进程的页表、TLB等全部要进行切换;线程的切换稍微简单点,需要把相关寄存器内容切换下就可以了。
如果仅仅是一些业务逻辑或计算,不需要IO、时钟阻塞等等,那就可以用协程来工作。在复杂的业务系统里面,如果有成千上万、甚至更多的进程/线程的话,系统耗费在进程/线程上面的切换将是巨大的。所以,协程在某些业务场景下应用,就可以极大的利用系统的资源,提高系统的利用率。
Notice,协程有其的特长,但是不会取代进程/线程的,是有使用局限性的。一般来讲,协程的逻辑中是不可以调用阻塞式系统接口的,除非使用的协程库内封装的阻塞接口,否则会导致其所在的进程/线程被挂起。另,使用时,1个协程需要显式的调用切换/出让接口以让其他协程进行工作。
0 0
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 协程
- 编译NS3的visualizer时遇到的转换错误
- Windows dos命令简介
- JVM垃圾收集器总结
- 使用Android Studio阅读整个Android源码
- 远程访问jupyter notebook
- 协程
- 【JAVA技术库】删除列表选中的多个数据
- java中常用的String方法
- java环境配置(win10)
- HDU 2087 剪花布条(KMP算法)
- 计算两个经纬度点之间的距离[java]
- 2017年团体程序设计天梯赛-总决赛 L2-2. 重排链表
- Android开发艺术探索读书笔记——进程间通信
- Linux中sudo命令介绍