IO模型介绍(select、poll、epoll)

💡 原文中文,约5200字,阅读约需13分钟。
📝

内容提要

IO模型是指输入输出模型,常见的有磁盘IO和网络IO。应用程序不能直接进行读写操作,而是通过操作系统提供的API来进行。IO调用是应用程序向操作系统发起调用,IO执行是操作系统完成IO操作。一次IO流程包括应用程序发起IO调用、操作系统准备数据、数据准备阶段、数据copy阶段。阻塞IO需要不断调用read函数进行系统调用,而非阻塞IO可以通过循环尝试读写文件描述符。多路复用通过select、poll、epoll函数同时监控多个文件描述符,减少线程资源创建。异步IO模型只需要发送一次请求就可以完成状态询问和数据拷贝的操作。同步IO是发出调用后需要参与等待结果的过程,异步IO是发出调用后自己不参与等待。

🎯

关键要点

  • IO模型是输入输出模型,包括磁盘IO和网络IO。
  • 应用程序通过操作系统的API进行IO操作,不能直接读写。
  • IO调用是应用程序向操作系统发起的请求,IO执行是操作系统完成操作的过程。
  • 一次IO流程包括发起调用、准备数据、数据准备阶段和数据拷贝阶段。
  • 阻塞IO需要不断调用read函数,而非阻塞IO通过循环尝试读写文件描述符。
  • 多路复用使用select、poll、epoll函数监控多个文件描述符,减少线程资源创建。
  • 异步IO模型只需发送一次请求即可完成状态询问和数据拷贝。
  • 同步IO需要等待结果,异步IO则不需要参与等待。
  • 非阻塞IO通过非阻塞的read()函数实现,第一阶段读未就绪时返回-1。
  • 多路复用减少了系统调用,内核检测文件描述符可读状态。
  • select、poll和epoll是多路复用的实现方式,epoll优化了性能。
  • epoll使用红黑树结构,提高事件增删查改效率。
  • 信号驱动IO通过SIGIO信号通知线程数据准备就绪。
  • 异步IO只需一次请求即可完成所有操作,优化了传统的询问和接收模式。
  • 同步IO需要参与等待,异步IO则不需要。
➡️

继续阅读