非阻塞事件循环如何工作?

时间:2010-06-18 16:04:04

标签: language-agnostic loops twisted blocking nonblocking

Twisted有一个“非阻塞”事件循环。

我理解阻塞事件循环的作用(来自维基百科页面),但无法弄清楚非阻塞事件的作用。

1 个答案:

答案 0 :(得分:3)

while (true)
    wait_for_events
    handle_events

基本上,非阻塞事件循环使用允许同时等待多个事件的设备(UNIX上为select / poll,Windows上为WaitForMultipleEvents,Linux上为epoll FreeBSD上的kqueue等)。在主循环的每次迭代中,事件(文件描述符,定时器等)都在某种句柄中注册。然后,调用等待事件的函数(例如select)。这通常会返回在调用该函数期间发生的所有事件。最后,循环处理该事件 - 通常通过调用与事件关联的回调。

有关详细信息,请参阅libevent或某些GUI工具包事件循环的实现 - GTK +或Qt。