1.同步與異步
同步和異步關注的是消息通信機制 (synchronous communication/ asynchronous communication)
所謂同步吗蚌,就是在發(fā)出一個調(diào)用時磺箕,在沒有得到結果之前,該調(diào)用就不返回驮俗。但是一旦調(diào)用返回,就得到返回值了允跑。
換句話說王凑,就是由調(diào)用者主動等待這個調(diào)*的結果搪柑。
而異步則是相反,調(diào)用在發(fā)出之后索烹,這個調(diào)用就直接返回了工碾,所以沒有返回結果。換句話說百姓,當一個異步過程調(diào)用發(fā)出后渊额,調(diào)用者不會立刻得到結果。而是在調(diào)用發(fā)出后垒拢,被調(diào)用者通過狀態(tài)旬迹、通知來通知調(diào)用者,或通過回調(diào)函數(shù)處理這個調(diào)用求类。
典型的異步編程模型比如Node.js
舉個通俗的例子:
你打電話問書店老板有沒有《分布式系統(tǒng)》這本書奔垦,如果是同步通信機制,書店老板會說仑嗅,你稍等宴倍,”我查一下",然后開始查啊查仓技,等查好了(可能是5秒鸵贬,也可能是一天)告訴你結果(返回結果)。
而異步通信機制脖捻,書店老板直接告訴你我查一下啊阔逼,查好了打電話給你,然后直接掛電話了(不返回結果)地沮。然后查好了嗜浮,他會主動打電話給你。在這里老板通過“回電”這種方式來回調(diào)摩疑。
- 阻塞與非阻塞
阻塞和非阻塞關注的是程序在等待調(diào)用結果(消息危融,返回值)時的狀態(tài).
阻塞調(diào)用是指調(diào)用結果返回之前,當前線程會被掛起雷袋。調(diào)用線程只有在得到結果之后才會返回吉殃。
非阻塞調(diào)用指在不能立刻得到結果之前,該調(diào)用不會阻塞當前線程楷怒。