阻塞和非阻塞

Posted on 2012-05-15 14:38  逝水如年  阅读(200)  评论(0)    收藏  举报

阻塞和非阻塞官方版

阻塞(BLOCK):当进程调用一个阻塞的系统函数时,该进程被置于睡眠状态,这时内核调度其它进程运行,直到该进程等待的事件发生了。

非阻塞(NONBLOCK):利用循环监听该函数,为监听到事件发生,就执行其他事件,监听到事件发生就继续执行(监听者应该尝试着再读一次,而不是一直等待...)。

阻塞和非阻塞通俗版本

阻塞:就相当于你去银行取钱,中午去的时候人比较多,如果你在那边排队等待而不去做其他事情,直到取完钱为止。

非阻塞:相当于中午取钱人很多的时候,我先离开选择,隔段时间来看一次,直到发现没人的时候我取钱,这里可以设置超时,超时了就继续执行。

 

非阻塞可以同时轮询监听多个设备:

while (1){

  非阻塞read(设备1);

  if(设备1有数据到达)

    处理数据;

  非阻塞read(设备2);

  if(设备2有数据到达)

    处理数据;

  ...

}

以上加入了自己的理解,如果发现不妥欢迎评价!

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3