同样 , 将此展开也不是一个对称的图形了 。
独占栈和共享栈
独占栈()即为每个协程分配一个单独的、固定大小的栈;
共享栈( the stack)则仅为当前正在运行的协程分配栈内存;
共享栈这里其实就是当协程被切出去时 , 就把它实际占用的栈内存copy保存到一个单独分配的缓冲区;当被切出去的协程再次调度执行时 , 再一次copy将原来保存的栈内存恢复到那个共享的、固定大小的栈空间 。
libco将两者都实现了 , 默认使用前者 。
定时器
为什么要介绍定时器呢?是因为定时器是协程调度中不可缺失的一个部分 。就跟CPU的时间片轮转法一样 , 协程调度器通过定时器来调度协程 。
定时器是事件驱动模型的网络框架的必不可少的功能 。网络I/O的超时、定时任务 , 包括定时等待都依赖于此 。
一般而言 , 使用定时功能时 , 我们首先向定时器中注册一个定时事件 , 在注册定时事件时需要指定这个事件在未来的触发事件 。在到了触发时间点后 , 我们会收到定时器的通知 。
网络中的定时器 , 一般可以看做两部分组成:
libco中则是直接使用epoll来定时 , 其中的定时器实现算法如下:
:调用等待I/O就绪事件 , 最大等待时长设置为1毫秒处理I/O就绪事件:循环处理得到的I/O就绪文件描述符从时间轮取超时事件:从时间轮取超时事件 , 放到队列处理超时事件:如果取到的超时事件不为空 , 那么就循环处理队列中的定时任务跳到步骤1 参考文献
[1] C++开源协程库libco详解[2]协程学习(对称和非对称).tx征服者.知乎
- 六里桥南
- 佛冈酒店
- 女足世界杯|激荡南太平洋——2023女足世界杯综述 八上历史之最第一标志
- 吕洞宾——八仙之首,人仙之最 历史上八仙之最
- 云居滑雪场
- 哈萨克斯坦的首都
- 成都海宁皮革城
- 许小粒
- 阆中古城
- 「纯音汇」专题:《纯音乐·最好听——名曲十首串烧》荐赏小集 世界经典的十大纯音乐