2010-06-18 68 views
3

Twisted具有「非阻塞」事件循環。非阻塞事件循環如何工作?

我明白什麼是阻塞事件循環(從維基百科頁面排序),但無法弄清楚非阻塞事件是如何做的。

+0

這與我前段時間回答的另一個問題類似:http://stackoverflow.com/questions/80617/asychronous-programming-in-python-twisted/81456#81456 – Glyph 2010-06-25 18:03:36

回答

3
while (true) 
    wait_for_events 
    handle_events 

基本上,非阻塞事件循環利用設備,其允許等待同時多個事件(select/poll上UNIX,WaitForMultipleEvents在Windows,epoll在Linux kqueue在FreeBSD等等)。在主循環的每次迭代中,事件(文件描述符,定時器等)都在某種句柄中註冊。然後,調用等待事件的函數(例如,select)。這通常會返回在調用該函數期間發生的所有事件。最後,循環處理事件 - 通常通過調用與事件相關的回調。

有關詳細信息,請參閱libevent或某些GUI工具包事件循環的實現 - GTK +或Qt。

+0

只是出於好奇,如何系統處理'select()',我的意思是它作爲一個線程分叉?或過程?如果它不是線程或分叉作爲一個進程,我無法將自己的頭圍繞如何進行非阻塞... – chutsu 2012-08-13 17:58:30