IO模型介绍(select、poll、epoll)
内容提要
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则不需要。
延伸问答
IO模型的基本概念是什么?
IO模型是输入输出模型,包括磁盘IO和网络IO,应用程序通过操作系统的API进行IO操作。
阻塞IO和非阻塞IO有什么区别?
阻塞IO需要不断调用read函数等待数据,而非阻塞IO通过循环尝试读写文件描述符,第一阶段读未就绪时返回-1。
多路复用的作用是什么?
多路复用通过select、poll、epoll函数同时监控多个文件描述符,减少线程资源创建,提高效率。
epoll相较于select和poll有什么优势?
epoll优化了性能,减少了系统调用的开销,并使用红黑树结构提高事件增删查改的效率。
异步IO模型的工作原理是什么?
异步IO模型只需向内核发送一次请求,内核在数据准备就绪后主动将数据复制到用户空间,并通知应用程序。
同步IO和异步IO的主要区别是什么?
同步IO需要在发出调用后等待结果,而异步IO则在发出调用后不需要参与等待,内核会主动通知应用程序。