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协程。

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

你可能感兴趣的:(c++,开发语言,后端)