當你們在說同步,異步,阻塞,非阻塞的時候到底在說什麼?
一個術語的描述應該有一個目標對象吧
那些說同步,異步的家伙,從來不說這個目標對象是誰,在程序的運行過程中,有很多參與者,到底這個同步,異步用來描述誰的呢?
個人理解,同步與異步描述的是一種行為方式,阻塞與非阻塞描述的是一種狀態。
在js中,我們說同步,是說同步調用,舉個栗子:
代碼如下 function A(){那麼A對B,C發起了同步調用,這裡的主體是A。在執行A的時候,先執行B,在執行C,他們遵循嚴格的先後順序。其實就是一個順序執行。這是同步的具體特征。
而我們說異步,其實是說異步調用方式,表現出的具體特征是改變代碼的執行順序,在js中其實就是延遲執行。
例如:
代碼如下這裡讓B延遲執行,A運行時,會先執行C(),再執行B(),這就是A對B的異步調用。;但是setTimeout(B(),200)這個語句和C的執行,仍然保持嚴格的先後順序,只是C和B的執行順序發生了改變。
我認為使用同步調用,異步調用去描述這種現象更加明確。