五大 I/O模型
一、POSIX定义的同步与异步I/O:
可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)把同步I/O定义为导致进程阻塞直到I/O完成的操作,反之则是异步
实际上操作系统大多数时候采用的都是同步I/O
二、I/O是缓慢的
I/O操作绝对是计算机操作中中最慢的,例如访问RAM可以达到纳秒(ns)级别,的传输速度一般为GB/s,而在磁盘或网络上访问时(I/O),消耗的时间级却是毫秒(ms)级别的,传输速度MB/s起步,乐观情况下能达到GB/s。
三、缓慢是技术限制?
I/O操作对cpu而言代价并不高,单它在请求发送的时刻和操作完成时之间增加了一个延迟,除此之外还要考虑认为因素对于,输入输出是与人为有很大关系的,输入往往来自于一个真实的人,例如单击按钮或者在实时聊天中发送的消息,因此I/O的速度和频率不仅取决于技术方面,事实上,人为因为导致的缓慢还要比技术上的限制更加耗时,甚至高了几个数量级
四、有那些I/O模型呢?
一、阻塞I/O
在传统的阻塞I/O编程中,与I/O请求相对应的函数的调用将会阻塞线程的执行,伪代码
//阻塞线程直到数据是有效的
date = socket.read();
//当data是有效的
print(data);
对于web服务而言,使用阻塞I/O实现将无法处理同一线程中的多个连接服务,socket上的每个I/O服务将阻止其他任何连接的处理,因此在Web服务中常常为每个socket开启一个线程,这样,当某一个线程被I/O操作阻塞时,不会影响其他请求的可用性
- 阻塞io模型

二、非阻塞I/O
大多数操作系统支持另一种访问资源的机制,在此操作模式下,系统调用总是会立即返回,而无需等待数据读取或者写入,如果在调用的时候没有用可以使用的结果,则函数简单地返回预定义的常量,如果有,则处理数据,伪代码例如
resources = [

博客探讨了POSIX定义的同步与异步I/O,指出I/O操作是计算机中最慢的部分,主要讨论了五种I/O模型:阻塞I/O会导致线程阻塞,非阻塞I/O不阻塞但可能需要多次系统调用,I/O复用如select/poll/epoll允许单线程处理多个连接,信号驱动I/O通过信号通知IO完成,异步I/O则在后台完成操作且不阻塞调用者。

600

被折叠的 条评论
为什么被折叠?



