协程框架思考

网络编程中协程的作用

记住一句话即可:协程可以实现同步的编程方式,性能和多线程异步回调相似。

实现上下文切换的方式

  1. setjump/long jump
  2. ucontext
  3. 汇编代码

协程中需要包含哪些成员?

  1. 寄存器组
  2. 入口函数
  3. 函数参数
  4. 返回值
  5. 栈地址(共享栈和独立栈)
  6. 栈大小(4K)
  7. 协程状态

协程不同状态使用什么数据结构

  1. 新建/就绪:队列
  2. 等待:红黑树
  3. 睡眠:红黑树
    这里为什么不用小顶堆?小顶堆适合取出次数小的任务,红黑树是有序的,在大量超时取出的情况下效率低。

多核模式下调度器怎么设计?

  1. 多线程:如果多个线程公用一个调用器,使用调度器的时候需要加锁(涉及红黑树、队列的操作)
  2. 多进程:每个核绑定一个进程