其缺点为:
- 每次调用 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 错误的可能原因?
- 正向代理和反向代理之间的区别是什么?
推荐阅读
- EMUI11畅连大文件闪传用实力说话,P40系列和Mate 30系列用户还不快来升级
- 极速鲨课堂84:主板的挡板有用么?
- 微软推实用磁盘工具DiskSpace 帮用户分析文件占用空间
- F2FS面向Linux 5.11继续加强其加密及文件数据压缩功能
- Paragon发布最新的Linux NTFS文件系统补丁程序
- 手机越用越卡?记得删除这5个英文文件夹,还你一片流畅
- Linux 5.11 XFS将自动标记并拒绝挂载需要修复的文件系统
- Linux 5.11引入了Btrfs文件系统的诸多改进和性能提升
- 「6」进大厂必须掌握的面试题-Hibernate
- Feign解决服务之间传递文件、传递list,map、对象