知识卡片
阻塞非阻塞与同步异步是两个维度
内容
阻塞/非阻塞是”函数调用”角度:调用后是否一直等待数据就绪。同步/异步是”读写操作由谁完成”角度:应用自己执行,还是系统代劳后通知。两维度正交,但异步必是非阻塞的,故现实只剩三种:同步阻塞、同步非阻塞、异步。select/poll/epoll都属同步阻塞I/O。发散:概念混淆常因语境不同,先厘清定义维度比争论定义本身更高效。
参考来源
- 位置:第4章《操作系统》「阻塞非阻塞、同步异步」小节总结(源文件:_epub-src/text/part0010.html)
- 结论依据:原文明确总结阻塞和非阻塞是从函数调用角度定义、同步和异步是从'读写是谁完成的'角度定义,异步I/O一定是非阻塞I/O,因此现实中只有同步阻塞、同步非阻塞、异步I/O三种,select/poll/epoll都属于同步阻塞I/O,直接支持卡片对两个维度正交组合、现实只剩三种搭配的论述。
- 原始内容:"阻塞和非阻塞是从函数调用角度来说的,而同步和异步是从'读写是谁完成的'角度来说的……异步I/O一定是非阻塞I/O,不存在既是异步I/O,又是阻塞的……归类后共有三种:同步阻塞I/O、同步非阻塞I/O、异步I/O……I/O多路复用(select、poll、epoll)都是同步I/O。"