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