Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 非阻塞事件循环如何工作?_Language Agnostic_Loops_Twisted_Blocking_Nonblocking - Fatal编程技术网

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

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等)。在主循环的每次迭代中,事件(文件描述符、计时器等)都被注

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

我理解阻塞事件循环的作用(从维基百科页面上可以看出),但无法理解非阻塞事件循环的作用

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


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

这类似于我不久前回答的另一个问题:出于好奇,系统如何处理
select()
,我的意思是它是否作为线程分叉?还是过程?如果它不是线程化的或分叉的,我无法理解它是如何非阻塞的。。。