非阻塞事件循环如何工作?
答
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
这与我前段时间回答的另一个问题类似:http://stackoverflow.com/questions/80617/asychronous-programming-in-python-twisted/81456#81456 – Glyph 2010-06-25 18:03:36