操作系统 — 协程的简单理解

协程的简单理解



协程是一种用户态的轻量级线程, 我们的server的发展如下:IO密集型应用:多进程 -> 多线程 ->事件驱动 ->协程  

CPU密集型应用:多进程->多线程 如果说多进程对应多CPU,多线程对应多核CPU,那么事件驱动和协程则是在充分挖掘不断提高性能的

单核CPU的潜力. 异步事件驱动模型中,把会导致阻塞的操作转化为一个异步操作,主线程负责发起这个异步操作,并处理这个异步操

作的结果. 由于所有阻塞的操作都转化为异步操作,理论上主线程的大部分时间都是在处理实际的计算任务,少了多线程的调度时间,

所以这种模型的性能通常会比较好. 总的来说,当单核CPU性能提升,CPU不在成为性能瓶颈时,采用异步server能简化编程模型,

也能提高IO密集型应用的性能.


协程拥有自己的寄存器上下文和栈. 协程调度切换时,将寄存器上下文和栈保存到其他地方,然后去做其他工作,当你的IO解除之后切

回原来的状态,恢复先前保存的寄存器上下文和栈.因此:


协程能保留上一次调用时的状态(既所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态. 也就是相当

于LOL艾克的R.(不懂得可以去百度一下~  艾克的R技能) 在并发编程中,协程与线程类似,每一个协程表示一个执行单元,有自己

的本地数据,与其他协程共享数据和其他资源. 目前主流语言基本都选择多线程作为并发设施,与线程相关的概念是抢占式多任务

,而与协程相关的是协作式多任务.不管是进程还是线程,每次阻塞,切换都需要陷入系统调用,先让CPU跑操作系统的调度程序

,然后再由调度程序决定该跑哪一个进程.而且由于抢占式调度执行顺序无法确定的特点,使用线程时需要非常小心地处理同步问题

,而协程完全不存在这个问题(事件驱动好异步程序)


我们在自己的进程里面完成逻辑流调度,碰到IO我就用非阻塞式的,那么我们既可以利用到异步优势,又可以避免反复系统调用,还有

进程切换造成的开销,分分钟给你上千个逻辑流不费力,这就是协程.

基于事件驱动的编程是单线程思维,其特点是异步+回调. 协程也是单线程,但是它能让原来要使用异步+回调方式写的非人类代码,

可以用看似同步的方式写出来,它是实现推拉互动的所谓非抢占式协作的关键.


协程的优点:

1.跨平台

2.无需线程上下文切换的开销

3.无需原子操作锁定及同步的开销

5.方便切换控制流,简化编程模型

6.高并发+高扩展行+低成本: 一个CPU支持上万的协程都不是问题,所以很适合用于高并发处理

.

协程的缺点:

1.无法利用多核资源:协程的本质是一个单线程,它不能同时将单个CPU的多个核作用上,协程需要和进程配合才能运行在多CPU上.

2.进行阻塞(BLOCKing)操作会阻塞到整个程序; 这一点和事件驱动一样,可以使用异步IO操作来解决.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值