首页 > 代码库 > 谈I/O模型
谈I/O模型
一个IO操作涉及两个系统对象:
- 调用这个IO的用户Process/Thread
- 系统内核 - System Kernel
一个具体的Read操作包括两个阶段:
- 内核等待数据准备就绪:Waiting for the data to be ready
- 从内核向用户进程/线程拷贝数据:Copying the data from the Kernel to the Process/Thread
只有在同步的情况下才会有“阻塞”和“非阻塞”之说,异步情况,必须是非阻塞的!
同步 vs 异步
同步与异步是针对应用程序与内核的交互而言的,进程/线程触发IO操作后:
- 同步过程:进程/线程等待IO操作完成(阻塞)或轮询查看IO操作是否完成(非阻塞);
- 异步过程:直接返回,进程/线程做自己的事情,IO操作交给内核处理、完成后内核通知进程/线程;
同步 Synchronous
A Synchronous-I/O operation causes the requesting process to be blocked until that I/O operation completes.
串行,无条件等待。
异步 Asynchronous
An Asynchronous-I/O operation does not cause the requesting process to be blocked.
并发,
阻塞 vs 非阻塞
关于阻塞/非阻塞,在网络编程中通常应用在是不是需要等待数据就绪。
阻塞 Blocking
挂起等待,
非阻塞 Non-Blocking
轮询检查等待,
参考:怎样理解阻塞非阻塞与同步异步的区别? - 知乎;
I/O模型
阻塞I/O(Blocking I/O)
非阻塞I/O(Non-Blocking I/O)
I/O多路复用(I/O Multiplexing)
信号驱动I/O(Signal Driven I/O)
异步I/O(Asynchronous I/O)
推荐书籍:
- 《UNIX网络编程 - 卷1》:第六章
参考:
- 我和女友解释I/O模型;
- Java NIO:浅析I/O模型 - 海子; 也谈同步异步I/O;
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇);
谈I/O模型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。