码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-06-14 06:30:57      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:i/o模型、linux

    一般来说,程序进行输入操作有两步:等、搬迁 。

    在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

     让内核拷贝完成之后通知我们。

技术分享技术分享


本文出自 “GREEN” 博客,请务必保留此出处http://green906.blog.51cto.com/10697569/1788943

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

标签:i/o模型、linux

原文地址:http://green906.blog.51cto.com/10697569/1788943

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!