@tingyuge
2016-10-14T01:03:44.000000Z
字数 791
阅读 1243
操作系统
要分清协程是什么就需要先去分一些类似的概念:
并发:早期的操作系统是批处理系统,CPU在一段时间内只能处理一个任务,要处理下一个任务就需要等待当前任务处理完成,即使当前任务在等待IO操作等,为了提高任务的处理效率,便提出将CPU时间分片,操作系统将时间分配给不同的任务,尽量不让CPU空闲下来,比如:第一秒执行A,第二秒执行B;由于时间片比较短,使得任务看起来就像是同时在处理一样,这便是并发处理。
进程:在并发处理中,由于需要进行任务切换,这便导致对于不同的任务操作系统需要维护各自的任务状态,每次切换需要同时切换任务的状态,为了清晰的描述这种切换及运行活动,便引入了进程的概念。进程是CPU处理的基本单元,每个进程有自己的上下文,有自己的堆栈空间。
并行:随着技术不断发展,一台机器上可以有多个CPU,多个CPU便可以同时处理多个进程,这种模式就是并行模式。
线程:因为进程在切换的时候需要保存当前进程的相关状态然后再进行堆栈空间的切换,这使得进程仍然有些慢,为了解决这种进程切换过慢的问题便引入了线程的概念,线程可以理解为进程的子进程,存在于进程内,一个进程可以有多个线程,线程共享进程的资源,在线程切换时就不需要进行资源切换,这样机器性能又得到了提高。
不管是进程切换还是线程切换,我们都需要从系统调用开始,即切换必须涉及到用户态和内核态的函数调用。那么,能不能更快一点呢,能不能只让线程的逻辑切换只在用户态进行呢,这样线程的切换开销就更小了,这个就是用户态线程。协程:不管是进程还是线程,调度算法对于程序来说都是“被动”式的。那么就会出现线程不需要CPU而操作系统依然分配了CPU给线程,为了解决这种问题就出现了协程的概念。协程是主动的通知操作系统将CPU控制权交给期望的协程。所以协程可以认为是主动性的用户态进程。
有趣的可以参见:协程的好处是什么? - 回答作者: 阿猫