阻塞和非阻塞IO

1:阻塞IO就是执行设备操作时,如果不能获得资源,进程就会被挂起进入睡眠状态,直到等待条件满足。
  非阻塞IO就是资源不能获得时不会挂起,驱动返回 -EAGAIN。应用程序或者不断轮询IO设备,或者通过IO多路复用(select\poll\epoll)
阻塞检测设备是否可以立即读写,如果可以立即读写返回执行IO函数。

2:在打开文件时使用O_NONBLOCK标志指定非阻塞IO,或者在打开文件后,使用ioctl()或fcntl()改变IO模式。例如:
fcntl(fd, F_SETFL, O_NONBLOCK);设置为非阻塞。

3:一般阻塞IO 驱动通过 等待队列机制 实现,非阻塞IO 驱动通过文件操作的 poll()函数实现。

posted @ 2020-12-03 21:44  bobfly1984  阅读(245)  评论(0编辑  收藏  举报