Language agnostic 非阻塞事件循环如何工作?
Twisted有一个“非阻塞”事件循环 我理解阻塞事件循环的作用(从维基百科页面上可以看出),但无法理解非阻塞事件循环的作用Language agnostic 非阻塞事件循环如何工作?,language-agnostic,loops,twisted,blocking,nonblocking,Language Agnostic,Loops,Twisted,Blocking,Nonblocking,Twisted有一个“非阻塞”事件循环 我理解阻塞事件循环的作用(从维基百科页面上可以看出),但无法理解非阻塞事件循环的作用 while (true) wait_for_events handle_events 基本上,非阻塞事件循环利用允许同时等待多个事件的设备(UNIX上的select/poll,Windows上的WaitForMultipleEvents,Linux上的epoll,FreeBSD上的kqueue等)。在主循环的每次迭代中,事件(文件描述符、计时器等)都被注
while (true)
wait_for_events
handle_events
基本上,非阻塞事件循环利用允许同时等待多个事件的设备(UNIX上的select
/poll
,Windows上的WaitForMultipleEvents
,Linux上的epoll
,FreeBSD上的kqueue
等)。在主循环的每次迭代中,事件(文件描述符、计时器等)都被注册到某种句柄中。然后,调用一个等待事件的函数(例如,select
)。这通常返回调用该函数期间发生的所有事件。最后,循环处理该事件-通常通过调用与事件相关联的回调
有关详细信息,请参阅libevent或某些GUI工具包事件循环的实现-GTK+或Qt。这类似于我不久前回答的另一个问题:出于好奇,系统如何处理
select()
,我的意思是它是否作为线程分叉?还是过程?如果它不是线程化的或分叉的,我无法理解它是如何非阻塞的。。。