NGINX 阻塞、非阻塞与同步、异步的区别

  同步/异步
    消息通知机制:
        同步:等待对方返回消息;
        异步:被调用者通过状态, 通过 通知回调机制告知 调用者 被调用者的运行状态#这句话有点绕,加上颜色会看的更清楚点吧....
 
举个例子:你去银行取钱,但是前面排号的人有很多,你就一直等啊等~ 终于所有人的业务都办完了,可以给你办理业务了,这叫同步。
        又或者你是银行的VIP用户,大堂经理给你说,你先出去忙别的吧,等到到你的时候我给你打电话,这叫异步。  
 
阻塞/非阻塞
    调用者在等待结果之前所处状态:
        阻塞:blocking,调用结果返回之前,调用者被挂起;
        非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起;
 
举个例子:你到了书店想买一本书,但是老板说这本书没有了,他们需要去进货,但是进货日期未定,你就一直在书店等啊等,直到老板进货回来,这是阻塞。
                  或者你就回家该吃吃,该喝喝,但是时不时的来书店瞅一眼有没有进货回来,这是非阻塞。
 
同步和异步是说,我是否让被调用者来通知我IO结果。 
阻塞和非阻塞是说,如果我不能立即获得IO结果,那么是否等待。
 
在其他地方看到一个比较清楚的小栗子,拿过来分享一下。
例子出处:https://blog.csdn.net/linhuaiyang/article/details/68483222

经典故事案例:

  • 人物:老张
  • 道具:普通水壶(水烧开不响);响水壶(水烧开发出响声)
  • 案例:
                       1、同步阻塞:
                             老张在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步);
                       2、异步阻塞:
                             老张在厨房用响水壶烧水,一直在厨房中等着(阻塞),直到水壶发出响声(异步),老张知道水烧开了;
                       3、同步非阻塞:
                             老张在厨房用普通水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),然后时不时去厨房看看水烧开了没(轮询检查同步结果);
                       4、异步非阻塞:
                             老张在厨房用响水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),当水壶发出响声(异步),老张就知道水烧开了。

猜你喜欢

转载自www.cnblogs.com/MYue/p/9227543.html