2017-09-23 70 views
0

我想了解Gevent/Greenlet选择下一个要运行的greenlet的方式。线程使用OS调度程序。 Go Runtime使用2个层次队列。Gevent如何选择下一个greenlet运行?

默认情况下,Gevent使用libevent进行测试。 但是,如果许多人准备好,libevent如何选择下一个greenlet跑呢?

它是随机的吗?

我已经阅读了他们的文档,并看到了源代码。仍不知道。

更新:文本更改为承认Gevent使用libevent。这个问题仍然适用于libevent。

+0

首先请注意,greenlet本身不会“选择”任何东西。 Greenlet只提供了一个协程向另一个协程的机制。 gevent是greenlet + libevent,libevent提供事件循环。 – jwg

+1

所以,一个等效但更精确的问题是:如果许多人准备好,在Gevent中使用libevent时,libevent如何选择下一个greenlet? – alanjds

+0

@alands,是的,我相信。 – jwg

回答

0

它是底层调度模型,是libevent中的事件循环,它使用事件库,它监视不同的事件,并对它们作出一定的反应,然后从我的闪烁中发现,它会让greenlet做一些琐事与信号量,然后派遣到libevent。

+0

欢迎来到StackOverflow!这增加了一些有用的信息,特别是libevent的存在,但我不认为它完全回答了这个问题。 – jwg