zoukankan      html  css  js  c++  java
  • 阻塞和非阻塞I/O

    阻塞和非阻塞I/O是设备访问的两种不同模式,驱动程序可以灵活的支持用户空间对设备的这两种访问形式。

           阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后在进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。

    而非阻塞操作的进程在不能进行设备操作时,并不挂起,他或者放弃,或者不停的查询,直到可以进行操作为止。

         注:阻塞听起来意味着低效率,其实不然,如果设备部阻塞,则用户想获取设备资源时,只能不停的查询,这反而会增加CPU资源的耗费,而阻塞方式是,不能获取资源的进程将进入休眠,他将CPU资源让给其他的进程。

             阻塞会进入休眠,因此必须有一个地方能够唤醒休眠的进程,否则,这个进程就“寿终正寝”了。这个地方最大的可能是在中断,因为硬件的资源的获得往往伴随着中断。下列演示了以阻塞和非阻塞方式读取串口的一个字符

           在linux驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。
  • 相关阅读:
    oracle-DML-2
    Oracle--DML
    jquery 调用asp.net后台代码
    hdu--1505--稍微特别的子矩阵求和<修改第一次发表的错误>--<增加stack写法>
    hdu--2159--二维费用背包<一维错误解法>
    hdu--2571--dp
    hdu--1231&&1003--dp
    hdu--1251--字典树
    hdu--1075--字典树||map
    hdu--1421--dp&&滚动数组
  • 原文地址:https://www.cnblogs.com/reality-soul/p/6543594.html
Copyright © 2011-2022 走看看