IO模型:阻塞、非阻塞、同步、异步

参考文章:
怎样理解阻塞非阻塞与同步异步的区别?

  • 阻塞与非阻塞
    这两者是从调用者的角度出发的,说的是调用者等待结果的状态,等待结果的时候调用者可以一直干等(线程挂起),这就是阻塞,如果不等待,没有结果就走,采用轮询不断地查看结果的叫非阻塞,这个时候调用者没有干等,可以去干其他的事情。

  • 同步异步
    有没有调用和获得结果这两个是否可以分开的机制(也就是结果另外通知),调用完不管有没有结果立刻返回,就是异步,而调用完一直等待结果的是同步。异步是一种高效的机制,需要额外的一些实现——消息通信机制,可以是信号量也可以是中断信号。

  • 为什么异步同步和阻塞非阻塞经常混淆?
    阻不阻塞是调用者的自由,异步同步是有没有一种高级机制。
    异步不阻塞:最好,异步阻塞很SB,明明别人做好了可以通知你,你偏要等。
    同步阻塞:由于没有高级机制,调用者干等可以理解。
    同步非阻塞:当然也可以,采用轮询,但是会有一点点不及时。
    实际上异步就是在

  • 看一个例子

1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)老张觉得自己聪明了。

作者:愚抄
链接:https://www.zhihu.com/question/19732473/answer/23434554
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(IO模型:阻塞、非阻塞、同步、异步)