Linux中五种常见的I/O模型

本文发布时间: 2019-Mar-22
一般来说,程序进行输入操作有两步:等、搬迁 。 在Linux下,共有五种I/O模型,下面就逐一介绍:1>.阻塞I/O(使用比较广) 应用程序调用一个I/O函数,如果数据木有准备好,就会导致应用程序阻塞,直到数据准备好了,从内核拷贝到用户空间(进程的缓存),I/O函数返回成功。 如一个进程调用recvform,然后系统调用并不返回直到有数据包到达本地系统,然后完成数据拷贝。2>.非阻塞I/O(极浪费CPU资源,不常使用) 我们把一个套接口设置为非阻塞,就是告诉内核,当请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。通过I/O操作函数不断地测试数据是否准备好,如果木有准备好,继续测试(轮询),直到数据准备好,从内核拷贝到用户空间,I/O函数返回成功。3>.I/O复用(实用的服务器程序) 使用select、poll、epoll l函数,也会使进程阻塞,但是和阻塞I/O不同的是,这些函数可以同时阻塞多个I/O操作,并且可以同时对多个读、写操作的I/O操作函数进行检测,直到有数据可读、可写时,才真正调用I/O操作函数,从内核拷贝到用户空间,I/O函数返回成功。4>.信号驱动I/O(SIGIO) 我们允许套接口进行信号驱动I/O,并注册一个信号处理函数,进程继续运行不阻塞,当数据准备好时,进程会受到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。5>.异步I/O 让内核拷贝完成之后通知我们。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表