Select、Poll、Epoll 有什么区别?

部分图片来源于:https://www.cnblogs.com/yanguhung/p/10145755.html

I/O模型

  1. BIO:同步阻塞IO

应用程序发起调用以后,一直阻塞,等待结果返回
2. NIO:同步非阻塞IO.

IO多路复用:IO 多路复用模型中,线程首先发起 select 调用,询问内核数据是否准备就绪,等内核把数据准备好了,用户线程再发起 read 调用。read 调用的过程(数据从内核空间 -> 用户空间)还是阻塞的。
3. AIO:异步IO
应用程序发起调用以后,直接返回,等处理完成后,进行通知回调。

IO多路复用

文件描述符:

  1. 用户线程调用select,将fd_set从用户空间拷贝到内核空间
  2. 内核在内核空间对fd_set遍历一遍,检查是否有就绪的socket描述符,如果没有的话,就会进入休眠,直到有就绪的socket描述符
  3. 内核返回select的结果给用户线程,即就绪的文件描述符数量
  4. 用户拿到就绪文件描述符数量后,再次对fd_set进行遍历,找出就绪的文件描述符
  5. 用户线程对就绪的文件描述符进行读写操作

select:底层bitmap,最大保存1024个文件描述符,需要O(n)遍历判断哪一个文件描述符是就绪的。
poll:优化select中文件描述符限制,使用了链表的数据结构,但是还需要遍历链表,判断哪个是就绪的。
epoll:优化epoll只需要判断活跃的文件描述符。

信号驱动模型

posted @   帅气的涛啊  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示

目录