常用事件模型总结

news/2024/10/23 5:31:04/

事件模型一般有select、poll、 eventport 、dev/poll、epoll、kqueue这几种。以下对这几种事件模型逐个作原理讲解。
1.select模型
 select通过select系统调用监视多个文件描述符集合,select调用返回后,集合中的文件描述符会被内核进行标志位的修改,进程可以获得这些文件描述符从而进行后续的读写操作。select几乎在所有的操作系统平台上都支持。select模型的缺陷在于单个进程能够监视的文件描述符的数量存在限制。
 select发生作用的原理是通过轮询监视的文件描述符集合,来获取发生”变化”的文件描述符,从而来进行读写事件的处理,select模型受制于文件描述符的数量。从监听的事件数量的角度来看,当监听的数量增多时,由于使用的是轮询的方式,因此在性能方面是不小的损耗。而这些损耗多数情况下是不必要的,因为对于监听的socket套接字或者文件异步IO,文件描述符通常是小部分会发生变化。不论网络的处理(网络存在延时同时瞬时活动的套接字的数量是比较少的)。
 这里引用网上的select处理流程图:
select处理流程

2.poll模型
 poll模型的处理机制和select类似,区别在于poll模型和select模型对于文件描述符集合的使用结构不同;poll使用的是pollfd结构,而select使用的是fd_set结构。其他两者的处理流程是类似的。

3.epoll模型
 epoll几乎是高性能服务器的必备事件模型,包含网络事件及异步IO。epoll也是在linux平台上特有的事件模型。相比select轮询的方式处理事件,epoll只会处理发生了”改变”的文件描述符,这样能很好地避免不必要的事件处理,提升了处理的性能及效率。epoll在kernel中的实现是用红黑树及链表(就绪队列)来表达处理的,添加一个事件,会在事件的结构中添加回调函数;这样在事件被内核检测到触发时,这个事件会被添加到链表中,当是用epoll_wait调用时,传递到用户态的就是已经需要被处理的事件了。
 同时,与select相比,epoll支持的文件描述符的数量是可以打开的文件数目,而不是select的进程可打开的文件描述符的数量,可打开的文件数量远远大于一个进程可以打开的文件描述符的数量(虽然进程可打开的文件描述符数量可以修改)。

3./dev/poll模型
 支持Solaris 7 11/99+、HP/UX 11.22+、IRIX 6.5.15+以及Tru64 UNIX 5.1A+。/dev/poll也是针对select/poll进行了改进,描述文件描述符集合的结构是pollfd,/dev/poll能在调用之间维持状态。由此,可以预先设置待查询的描述符列表,等待事件完整之后,无需像select/poll那样还要再设置文件描述符。

4.eventport模型
 eventport仅仅支持solaris 10及以上版本。

5.kqueue模型
 支持 FreeBSD 4.1+、OpenBSD 2.9+、 NetBSD 2.0、以及macOS这几种平台。
 kqueue的处理原理与epoll是比较类似的,但是在实现上存在差别。kqueue的实现依赖于名为knote的结构,knote包含两个功能:1.包含一个有事件发生需要通知用户态的knotes队列(与epoll中的就绪队列类似);2.保存需要监听的事件及文件描述符。kqueue对于事件及文件描述符的保存不是通过红黑树实现的,而是使用三个结构共同作用来进行描述。三个结构分别为:
1.队列,用于保存处于”活跃“状态的knotes节点
2.hash表,用于查找没有对应文件描述符的knotes节点
3.数组,和进程打开的文件描述符表是一致的


http://www.ppmy.cn/news/468533.html

相关文章

Kernel pwn 入门 (7)

本篇文章中,我们会练习回顾上一篇文章中学到的userfaultfd利用方式,同时学习一种新的利用方式:modprobe_path。使用的例题是:D^3CTF-2019 knote,需要两种利用配合使用。下面我们对本题进行分析。题目下载地址&#xff…

elementui el-image组件 点击预览图片

效果&#xff1a;点击单个图片&#xff0c;查看大图 <template><el-container class"platform-list-page"><el-main class"stationList"><data-tableref"DataTable":default-show-type"defaultShowType":default…

IPS、VA、TN屏构造和优缺点对比

转自https://display.ofweek.com/2018-05/ART-8321303-8500-30227810.html

送福利,价值1000的低蓝光护眼IPS显示屏,写代码神器!

快过年了&#xff0c; 为回馈各位老铁长期的关注与支持&#xff0c; 让大家能够更好的体验到编码的乐趣&#xff0c;提高技术水平&#xff0c; 直接送一个 低蓝光护眼IPS显示屏 &#xff01; 价值 1000 元&#xff0c; 简直美滋滋&#xff0c; 无论是自己用&#xff0c;还是当礼…

智慧屏鸿蒙哪个版本最好,高端技术下放毫不吝啬!华为智慧屏SE系列评测:鸿蒙OS让入门大屏也好用...

五、画质体验&#xff1a;在这块4K大屏上 超群的广色域覆盖是最大优势 对于大屏显示设备而言&#xff0c;更多人还是关注其画质体验。华为智慧屏SE系列搭载了一块LCD材质的屏幕&#xff0c;分辨率为4K&#xff0c;具备DCI-P3广色域。而且同价位段普通电视的色域覆盖率通常为DCI…

科普:什么是IPS

转自&#xff1a;http://tieba.baidu.com/p/3013646443 最近换了个笔记本&#xff0c;在性能参数上做足了功课。也费了不少劲。今天转载一篇对于IPS讲的挺实际&#xff0c;但是又理解的帖子&#xff0c;以供日后查阅。 第一&#xff0c;什么是IPS&#xff1f; 众所周知&#…

PC - IPS 屏幕到底哪里好?

如今液晶显示器已经几乎完全占据了显示领域&#xff0c;而在这个领域中&#xff0c;“IPS”这个名词也在大行其道&#xff0c;很多高端笔记本都可以选配IPS屏幕&#xff0c;用户也趋之若鹜&#xff0c;但我们不禁要问&#xff0c;IPS屏幕到底哪里好&#xff1f;为此多掏一笔钱是…

防火墙和IPS有什么区别

防火墙 目前主流使用状态检测功能来检查报文链路状态的合法性&#xff0c;丢弃链路状态不合法的报文&#xff0c;核心基础是会话状态。当满足接入条件的用户流量第一次穿越防火墙时&#xff0c;会产生一个会话表项&#xff0c;该会话的后续报文将基于该会话表项进行转发。 防…