Twisted拥有一个“非阻塞”事件循环。我了解什么是阻塞事件循环(从维基百科页面上了解到一些),但无法弄清楚非阻塞事件循环是如何工作的。
while (true)
wait_for_events
handle_events
select
/poll
,在Windows上使用WaitForMultipleEvents
,在Linux上使用epoll
,在FreeBSD上使用kqueue
等)。在主循环的每次迭代中,事件(文件描述符、定时器等)都会被注册在某种句柄中。然后,调用等待事件的函数(例如select
)。这通常返回在调用该函数期间发生的所有事件。最后,循环处理这些事件 - 通常是通过调用与事件相关联的回调函数来处理。select()
呢?我的意思是它是作为线程被分叉吗?还是作为进程?如果没有作为线程或进程被分叉,我就无法理解它如何成为非阻塞的。 - chutsu