想探究一下这几个名词,看着看着又打开了操作系统课本,果然以前的旧账还是要还的。下面从 IO 的角度来看。
I/O控制方式
CPU 给 I/O Controller 发送一条 I/O 指令,I/O Controller 将数据读取到内存中,完成后向 CPU 触发一次中断。
I/O Controller 是独立于 CPU 的硬件设备,可以和 CPU 并行工作。
进程的阻塞
如果进程执行了IO指令,且在IO操作完成后才能继续执行,则进程进入阻塞状态去等待,在 I/O 操作完成后,再由中断处理程序将该进程唤醒。
进程的阻塞是进程自身的一种主动行为,可以自己决定是否阻塞。
结论
看了网上的一些观点和讨论,还是没有找到很令我信服的解释。这两组词的含义很相似,我的结论是这两组词是人们在不同语境下的习惯说法而已。
计算机的 IO 读写经历了从同步非阻塞(CPU 轮询 I/O Controller 是否完成读写)到异步非阻塞(完成读写后触发中断),至于程序是否阻塞、同步或异步,则由程序语言和开发者决定。
参考资料
os-3.pdf
What is an I/O Controller (IOC)? - Definition from Techopedia