同步/异步和阻塞/非阻塞

来源:互联网 发布:淘宝手机助手5.0.0 编辑:程序博客网 时间:2024/06/10 21:58

什么是同步和异步?

在一本书上看到过一个例子:在食堂打饭,排队点菜。点完菜之后,食堂师傅开始为你准备你所点的东西,这需要花费一定的时间。在这段时间内,如果排在你后面的人一直在等待你取走自己的东西后才能开始点菜,那么这就是同步;但如果这段时间内,你在旁边等待自己的东西,食堂窗口可以接着处理排在你后面的人的点菜行为的话,这就是叫做异步。

那么更准确些说什么是异步和同步呢?如上面例子,食堂的窗口是一个服务,而排队的人都是服务的调用者,同步和异步就是描述这个服务调用的机制,或者说服务对请求的处理机制。

什么是阻塞和非阻塞?

接着上面的例子,当你点完菜等待师傅准备你的菜的过程中,你在一旁等待。此时你是服务的调用者,你在调用打菜服务以后只能等待,如果有其他的事情要干,而又不能干其他的事情,那么这个时候对你本身而言你就是处于一个阻塞的状态,但如果这段时间里,你可以去买饮料等其他东西,等到师傅将菜准备好后叫号再来取(这就是程序中的事件通知),那么你这个人就处于一个非阻塞的状态。

可见,阻塞和非阻塞是用来描述服务的调用者在调用服务后的状态的。

同步/异步和阻塞/非阻塞的关系

上面讲述了同步/异步和阻塞/非阻塞的概念,那么他们之间有什么关系呢?

事实上除了同步阻塞、同步非阻塞、异步阻塞、异步非阻塞都有可能发生,要看实际的服务机制和事务。

看到别人写的很贴切的例子:http://www.cnblogs.com/jogger/archive/2012/09/27/2705386.html


0 0