Gevent如何选择下一个greenlet运行?
问题描述:
我想了解Gevent/Greenlet选择下一个要运行的greenlet的方式。线程使用OS调度程序。 Go Runtime使用2个层次队列。Gevent如何选择下一个greenlet运行?
默认情况下,Gevent使用libevent进行测试。 但是,如果许多人准备好,libevent如何选择下一个greenlet跑呢?
它是随机的吗?
我已经阅读了他们的文档,并看到了源代码。仍不知道。
更新:文本更改为承认Gevent使用libevent。这个问题仍然适用于libevent。
答
它是底层调度模型,是libevent中的事件循环,它使用事件库,它监视不同的事件,并对它们作出一定的反应,然后从我的闪烁中发现,它会让greenlet做一些琐事与信号量,然后派遣到libevent。
+0
欢迎来到*!这增加了一些有用的信息,特别是libevent的存在,但我不认为它完全回答了这个问题。 – jwg
首先请注意,greenlet本身不会“选择”任何东西。 Greenlet只提供了一个协程向另一个协程的机制。 gevent是greenlet + libevent,libevent提供事件循环。 – jwg
所以,一个等效但更精确的问题是:如果许多人准备好,在Gevent中使用libevent时,libevent如何选择下一个greenlet? – alanjds
@alands,是的,我相信。 – jwg