c++协程

协程又称微线程,英文名Coroutine。

简而言之,协程就是可中断的函数,协程如何实现:保存上下文和恢复上下文。

一个线程执行一个子程序例如一个函数,调用子程序总是一个入口,一次返回,顺序明确,而协程看上去也是子程序,但执行过程中,在子程序内部可中断,转而执行别的子程序,在适当的时候再返回来执行,有点类似cpu的中断。特点在于是在一个线程执行的。

协程与多线程的优势?

  1. 协程执行效率极高,没有线程切换的开销,和多线程相比线程数量越多时协程的性能越明显。
  2. 不需要多线程的锁机制,因为只有一个线程。而非线程的抢占式多任务。

协程是一个线程,那如何利用多核cpu?

        最简单的方法是多进程+协程,能充分利用多核又充分发挥协程效率。

协程的两个原语:

  1. yeild 让出
  2. resume 恢复

三种实现协程的方式:

  1. setjmp/longjmp:libmill-基于 setjump/longjump 的协程切换
  2. ucontext :phxrpc-基于 ucontext/Boost.context 的上下文切换
  3. 汇编的代码:libco、Boost.context-基于汇编代码的上下文切换

     基于汇编的上下文切换要比采用系统调用的切换更加高效。

调度器

调度器就是处理好协程之间的调用,知道所有协程调用的时机,通过调度器可以实现更多的功能,如定时协程,io协程。

调度器简单理解为一个队列,将一个协程扔进调度器,调度器根据来执行所有的协程,那么调度器如何执行呢,简单来说就是使用一个循环,从队列中取出协程,然后“复苏”这个协程。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值