1. 程式人生 > >node.js看同步、非同步&阻塞、非阻塞

node.js看同步、非同步&阻塞、非阻塞

同步非同步是從當前時刻角度看的,阻塞非阻塞是對事件的執行過程來看的。

同步是指一個時刻僅有一件事件在執行。

非同步一個時刻可以有多個事件同時執行。

阻塞指事件執行必須連續,一個事件從開始到結束不能有其他的事件插入執行。

就像單執行緒cpu一樣,一個任務由多個小任務組成,但是隻能一個任務接一個任務流程的往想下走,誰在任務排序的前面就誰先執行,執行完了進行下一個,如果遇到錯誤,下面的小任務就不要做了,一直卡住。

非阻塞指事件可以分成小段執行,不要求從開始到結束連續執行。

就像多執行緒cpu一樣,一個任務由多個小任務組成,可以分開執行緒來做,哪個執行緒做分配到的任務,完成了對應的任務就行,某個執行緒的任務沒做完那就做報對應的錯,其他的不受影響。

舉個簡單的例子來說明:

我要看足球比賽,但是媽媽叫我燒水,電視機在客廳,燒水要在廚房。家裡有2個水壺,一個是普通的水壺,另一個是水開了會叫的那種水壺。我可以:

用普通的水壺燒,人在邊上看著,水開了再去看球。(同步,阻塞)這個是常規做法,但是我看球不爽了。

用普通水壺燒,人去看球,隔幾分鐘去廚房看看。(同步,非阻塞)這個又大問題,萬一在我離開的幾分鐘水開了,我就麻煩了。

用會叫的水壺,人在邊上看著。(非同步,阻塞)這個沒有問題,但是我太傻了。

用會叫的水壺,人去看球,聽見水壺叫了再去看。(非同步,非阻塞)這個應該是最好的。

等著看球的我:阻塞

看著電視的我:非阻塞

普通水壺:同步

會叫的水壺:非同步

所以,非同步往往配合非阻塞,才能發揮出威力。