python yield模式性能测试

python下的测试就不用time了,我们改用python的timeit,循环100M次。具体可以看py_yield.py。数据结果如下:

7.64262938499 9.2919304393e-06
5.41777145863 4.94284924931e-06

从结果来看,100M次循环的平均时间是5.4s,平均每次大约54ns。使用yield后变为76ns,增加了22ns。

python greenlet模式性能测试

这次代码在py_greenlet.py,循环10M次。数据结果如下:

5.35270996888 7.44085846125e-05
5.31448976199 5.82336765673e-05

单次循环时间消耗为535ns。比最初的54ns,增加了481ns。基本来说,时间增长了10倍率。

这是预料中的,因为greenlet早就声明自己通过堆栈拷贝来实现上下文切换。这会消耗大量CPU时间。从原理上说,栈越深,消耗越大。但是测试结果表明两者几乎没有差异,栈深反而性能更加优异(TODO: why?)。