同步、异步、阻塞、非阻塞。

看到一个很好的解释,于是记录下来。

非阻塞式通常是对于I/O操作而言的,意思就是当你请求一个系统调用的时候,不管收到什么结果函数都会立即返回,而不让线程进入休眠状态以等待I/O操作的完成。相反阻塞式I/O方式在请求一个磁盘文件时会进入线程休眠状态以等待磁盘I/O完成后再苏醒。

异步/同步与阻塞式/非阻塞式的区别在于前者主要描述消息通信机制,异步时被调用者通过通知、状态或回调来告知调用者。而后者主要描述程序在等待调用结果时的状态,非阻塞式时调用者主动以一定的间隔时间查看调用是否完成。

感觉还没讲清楚,再来一个栗子。小黄饿了,让妈妈做蛋糕给他吃(发起调用)。

同步阻塞:小黄啥也不干,就盯着(阻塞)妈妈做完蛋糕立即(同步)开吃。

异步阻塞:妈妈让小黄先去一边玩并答应蛋糕一做好就叫小黄来吃(异步通知),但小黄还是什么也不做(阻塞),等着妈妈把蛋糕做好。

同步非阻塞:妈妈开始做蛋糕之后小黄就去看电视了(非阻塞),但隔一下就去厨房看(同步)妈妈做好没。

异步非阻塞:妈妈答应蛋糕一做好就叫小黄来吃(异步通知),小黄安心看电视去了(非阻塞)。

从这里面可以看出,异步通常带有通知(或状态、回调),由被调用者通知调用者任务已完成,同步则调用者主动盯着任务是否完成。阻塞与非阻塞即描述被调用者进行任务时,调用者是干等着还是抽空干点别的。

 

原文链接:https://www.cnblogs.com/yulibostu/articles/9797983.html

posted @ 2019-05-16 13:55  我有点秃页  阅读(190)  评论(0编辑  收藏  举报