-
阻塞和非阻塞,同步和異步是node.js里經常遇到的詞匯,舉例說明:
我要看足球比賽,但是媽媽叫我燒水,電視機在客廳,燒水要在廚房。家里有2個水壺,一個是普通的水壺,另一個是水開了會叫的那種水壺。我可以:
- 用普通的水壺燒,人在邊上看著,水開了再去看球。(同步,阻塞)這個是常規做法,但是我看球不爽了。
- 用普通水壺燒,人去看球,隔幾分鐘去廚房看看。(同步,非阻塞)這個又大問題,萬一在我離開的幾分鐘水開了,我就麻煩了。
- 用會叫的水壺,人在邊上看著。(異步,阻塞)這個沒有問題,但是我太傻了。
- 用會叫的水壺,人去看球,聽見水壺叫了再去看。(異步,非阻塞)這個應該是最好的。
等著看球的我:阻塞
看著電視的我:非阻塞
普通水壺:同步
會叫的水壺:異步
所以,異步往往配合非阻塞,才能發揮出威力。
阻塞和非阻塞1.阻塞:就像單線程cpu一樣,一個任務由多個小任務組成,但是只能一個任務接一個任務流程的往想下走,誰在任務排序的前面就誰先執行,執行完了進行下一個,如果遇到錯誤,下面的小任務就不要做了,一直卡住。2.非阻塞:就像多線程cpu一樣,一個任務由多個小任務組成,可以分開線程來做,每個線程做分配到的任務,完成了對應的任務就行,某個線程的任務沒做完那就做報對應的錯,其他的不受影響。
-
同步:要做的事列了一個清單,按照清單上的順序 一個一個執行。
異步:就是可以同時干好幾件事。
阻塞:就是按照清單上的順序一件一件的往下走,任意一件事沒有做完,下面的事都干不了。
非阻塞:就是有事沒有作完,后面的事不會等這件事干完了再作,而是直接開始作下一件事,等這件事作完了,后面的事也作完了,這樣就大大提高了效率。