其缺点为:
- 每次调用 select , 都需要把 fd 集合从用户态拷贝到内核态 , 这个开销在 fd 很多时会很大
- 同时每次调用 select 都需要在内核遍历传递进来的所有 fd , 这个开销在 fd 很多时也很大
- select 支持的文件描述符数量只有 1024 , 非常小
Too many open files (24)此时就需要通过类似:ulimit -n 2048 的方式来临时提升 。
poll (1997)
对应的头文件和函数原型为:
文章插图
poll 和 select 原理一样 , 不过相比较 select 而言 , poll 可以支持大于 1024 个文件描述符 。
epoll (2002)
对应的头文件和函数原型为:
文章插图
相比较 select 和 poll , epoll 的最大特点是:
- epoll 现在是线程安全的 , 而 select 和 poll 不是 。
- epoll 内部使用了 mmap 共享了用户和内核的部分空间 , 避免了数据的来回拷贝 。
- epoll 基于事件驱动 , epoll_ctl 注册事件并注册 callback 回调函数 , epoll_wait 只返回发生的事件避免了像 select 和 poll 对事件的整个轮寻操作 。
- 四六级考试成绩快要出来的那段时间 , 小张每隔一段时间就去尝试查一下成绩 , 这个被称为轮训 。
- 小张并不在意疯狂刷新页面的事情 , 等到四六级成绩出来之后他的手机会自动收到考试院推送的一个小时:「叮 , 你的六级没过」 , 这样就是回调 。
- 对于 select / poll 模型来说 , 可以理解为让酒店代理订票 , 然后每隔几个小时就问一下买到没有 , 酒店在第二天订到了票 , 交钱给酒店拿到票 , 这样会需要额外的打电话时间和精力 。
- 对于 epoll 来说则是委托酒店帮忙订票 , 但是并不反复去问 , 酒店在第二天买到了票 , 酒店打电话通知来领票 , 交钱给酒店拿到票 。
其实不是 , 相比较 Nginx 而言 , Apache 作为一个非常老牌的网页服务器 , 其有丰富的模块组件支持 , 稳定性强 , BUG 少 , 动态内容处理强 , 而 Nginx 的优势主要则在于占用资源少 , 负载均衡 , 高并发处理强 , 静态内容处理高效 , 所有只有掌握了自己的具体业务场景 , 才可以分情况地讨论这两个服务器之间的区别 。
对于 Nginx 而言 , 其实还有许多高频面试题 , 例如:
- Nginx 常用命令有哪些?
- Nginx 返回 502 错误的可能原因?
- 正向代理和反向代理之间的区别是什么?
- 无边界办公——WebDAV文件共享服务构建
- 文件系统(02):基于SpringBoot管理Xml和CSV
- Doug Lea在J.U.C包里面写的BUG又被网友发现了
- 冷月手撕408之操作系统(18)-文件的概念
- 修复损坏的飞机遥控器
- 苹果手机里隐藏着一个扫描仪,扫描文件再也不用去复印店了
- 百度网盘推出新功能“收集文件”,免费还好用
- 阿里铁军原主帅俞朝翎:阿里面试中的“望闻问切”法
- Kibana安装
- tmpwatch命令清除旧文件