首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
WHY42
搜索
用户菜单
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Linux I/O models”︁的源代码
←
Linux I/O models
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
*阻塞I/O(blocking I/O) *非阻塞I/O (nonblocking I/O) *I/O复用(select 和poll) (I/O multiplexing) *信号驱动I/O (signal driven I/O (SIGIO)) *异步I/O (asynchronous I/O (the POSIX aio_functions)) 前四种都是同步,只有最后一种才是异步IO。 =blocking IO= 阻塞IO模型是最常见的IO模型了,对于所有的“慢速设备”(socket、pipe、fifo、terminal)的IO默认的方式都是阻塞的方式。阻塞就是进程放弃cpu,让给其他进程使用cpu。进程阻塞最显著的表现就是“进程睡眠了”。阻塞的时间通常取决于“数据”是否到来。 [[Image:Blocking_IO.jpg|600px]] =nonblocking IO= 一个非阻塞模式套接字多次调用recv()函数的过程。前三次调用recv()函数时,内核数据还没有准备好。因此,该函数立即返回WSAEWOULDBLOCK错误代码。第四次调用recv()函数时,数据已经准备好,被复制到应用程序的缓冲区中,recv()函数返回成功指示,应用程序开始处理数据。 [[Image:Noneblocking_IO.jpg|600px]] =IO multiplexing= I/O复用模型会用到select、poll、epoll函数,这几个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。 [[Image:IO_Multiplexing.png|600px]] =signal driven IO= [[Image:Signal_Driven_IO.jpg|600px]] =asynchronous IO= [[Image:Asynchronous_IO.jpg|600px]] *http://www.linuxidc.com/Linux/2015-07/120337.htm *http://blog.csdn.net/lovingprince/article/details/6426009 *http://blog.csdn.net/jay900323/article/details/18141217 [[Category:Linux/Unix]]
返回
Linux I/O models
。