事件驱动模型的调查

电脑杂谈  发布时间:2020-04-04 03:03:15  来源:网络整理

epoll 写事件怎样触发_epoll事件模型_epoll 写事件

全部展开

epoll是一个事件驱动的库,与上面的poll和select不同. 它是在Linux 2.5.44中引入的,属于poll的一种变体. 上面的轮询和选择库,它们最大的问题是效率. 他们的处理方法是创建一个事件列表,然后将该列表发送到内核,然后返回轮询以检查此列表,从而在应用更多描述符时,效率相对较低. 更好的做法是将描述符列表移交给内核. 一旦事件发生,内核将事件的描述符列表通知进程,这避免了轮询整个描述符列表. epoll就是这样一个模型. 下面介绍epoll的用法:

(1). 创建一个epoll描述符,调用epoll_create()完成,epoll_create()具有一个整数参数大小,用于告诉内核使用大小描述符创建事件列表(集合)

epoll 写事件_epoll事件模型_epoll 写事件怎样触发

int epoll_create(整数大小)

(2). 将感兴趣的事件设置为描述符,并将其添加到内核的事件列表中. 在这里,您需要调用epoll_ctl()来完成.

int epoll_ctl(int epfd,int op,int fd,struct epoll_event *事件)

epoll 写事件_epoll事件模型_epoll 写事件怎样触发

这里有三种op参数,代表三种操作:

a. EPOLL_CTL_ADD,将要关注的描述符和有关事件的结构添加到内核事件列表中

b. EPOLL_CTL_DEL,从内核事件列表中删除先前添加的描述符和与之相关的事件的结构

epoll 写事件怎样触发_epoll 写事件_epoll事件模型

c. EPOLL_CTL_MOD,将感兴趣的事件修改为先前添加到内核事件列表中的描述符

(3). 等待内核通知事件以获取事件描述符结构的列表. 此过程由epoll_wait()完成. 获取事件列表后epoll事件模型,您可以继续进行事件处理.

int epoll_wait(int epfdepoll事件模型,struct epoll_event *事件,int maxevents,int超时)

epoll事件模型_epoll 写事件_epoll 写事件怎样触发

使用epoll时,需要特别注意一件事,即epoll触发事件文件有两种方式:

(1)边沿触发(ET),在这种情况下,事件由到达边界的数据触发. 因此,在处理读写时,必须连续调用读写,直到它们返回EAGAIN,然后转到epoll_wait()以等待下一个事件. 此方法的应用应遵循以下原则:

a. 使用非阻塞I / O; b. 在读/写返回EAGAIN之前,不要等待下一个事件.

(2)级别触发(LT),在这种情况下,epoll和poll相似,但是处理速度可能比poll快. 在这种情况下,只要存在尚未读取或写入的数据,当调用epoll_wait()时,就会触发一个事件.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-163152-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...