阻塞与非阻塞概念
在阻塞访问时,不能获取资源的进程将进入休眠,它将CPU资源“礼让"给其他进程。因为阻塞的进程会进入休眠状态,所以必须确保有一个地方能够唤醒休眠的进程,否则,进程就真的“寿终正寝”了。唤醒进程的地方最大可能发生在中断里面,因为在硬件资源获得的同时往往伴随着一个中断。
非阻塞的进程则不断尝试,直到可以进行I/O。
相关概图
用户空间阻塞与非阻塞读写示例
阻塞访问:
非阻塞访问:
除了在打开文件时可以指定阻塞还是非阻塞方式以外,在文件打开后,也可以通过ioctl ()和fcntl ()改变读写的方式,如从阻塞变更为非阻塞或者从非阻塞变更为阻塞。例如,调用fcntl (fd,F_SETFL,O_NONBLOCK)可以设置fd对应的I/O为非阻塞。