非阻塞事件循环如何工作? [英] how does a non-blocking event loop work?

查看:79
本文介绍了非阻塞事件循环如何工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Twisted具有一个非阻塞"事件循环.

Twisted has a "non-blocking" event loop.

我了解阻塞事件循环的作用(从Wikipedia页面上可以理解),但无法弄清楚非阻塞事件循环的作用.

I understand what a blocking event loop does (sort of, from the Wikipedia page) but can't figure out how a non-blocking one does.

推荐答案

while (true)
    wait_for_events
    handle_events

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

Basically, non-blocking event loop utilizes device that allows for waiting for multiple events simultaneously (select/poll on UNIX, WaitForMultipleEvents on Windows, epoll on Linux kqueue on FreeBSD etc). In each iteration of main loop, events (file descriptors, timers etc) are registered in some kind of handle. Then, a function that waits for events (eg. select) is invoked. This typically returns all events that happened during invocation of that function. Finally, loop handles that events - typically by invoking callbacks associated with events.

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

For details, see implementation of libevent or some GUI toolkit event loops - GTK+ or Qt.

这篇关于非阻塞事件循环如何工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆