编程文汇

协程调度的调优

今天用时间轮替换了平衡二叉树,整体有所提升,测试yield的总次数,以下是测试结果:
(win10,amd ryzen 3600)
都是单线程:

协程数 切换速度(万次/秒) 列表内联化后
1 1660 1860
100 1570
1000 1340
5000 1350
10000 1050
20000 520

可以看出,时间轮的时间复杂度比较均衡,比较低。在10000万协程以下,调度效率保持在60%。而平衡二叉树,在1万协程的时候,调度效率就只有30%了。

从cpu开销来看,此时74%的开销在jum_context, 14.5%的开销在make_context,这两项占了88%的开销,优化空间不大,没必要继续优化。

这个切换效率和winfiber 的1540万 基本持平。