select()所维护的 存储大量文件描述符的数据结构,随着文件描述符数量的增长,其在用户态和内核的地址空间的复制所引发的开销也会线性增长
由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用select()还是会对 所有的socket进行一次线性扫描,会造成一定的开销
poll:poll是unix沿用select自己重新实现了一遍,唯一解决的问题是poll 没有最大文件描述符数量的限制
epoll模型:(nginx使用)
epoll带来了两个优势,大幅度提升了性能:
基于事件的就绪通知方式,select/poll方式,进程只有在调用一定的方法后,内核才会对所有监视的文件描述符进行扫描,而epoll事件通过epoll_ctl()注册一个文件描述符,一旦某个文件描述符就绪时,内核会采用类似call back的回调机制,迅速激活这个文件描述符,epoll_wait()便会得到通知
调用一次epoll_wait()获得就绪文件描述符时,返回的并不是实际的描述符,而是一个代表就绪描述符数量的值,拿到这些值去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里使用内存映射(mmap)技术,避免了复制大量文件描述符带来的开销
当然epoll也有一定的局限性,epoll只有linux2.6才有实现,而其他平台都没有,这和apache这种优秀的跨平台服务器,显然是有些背道而驰了 。
【从Nginx、Apache工作原理看为什么Nginx比Apache高效】简单来说epoll是select的升级版,单进程管理的文件描述符没有最大限制 。但epoll只有linux平台可使用 。作为跨平台的Apache没有使用
推荐阅读
- 想从程序员变成架构师?看100篇架构设计的文章,不如干1次这个
- HTML、CSS、JavaScript、PHP、 MySQL 的学习顺序是什么?
- 菱角不能和什么一起吃
- 16大汽车故障应急技巧,你必须掌握
- 加拿大旅游攻略 - 从西到东,一次走完整个枫叶国
- 三九天和三伏天从什么时候开始 三九天指的是什么三伏天指的是什么
- 清明节|吴尊友:不建议清明假期跨省旅行、省内出行要注意防护
- 庐山云雾茶真假、品质鉴别方法
- 职业病防治|留学生归国后主要从事的是这些行业!
- 思维导图 抖音运营全攻略