當大家在說同步,異步,阻塞,非阻塞的時候到底在說什麼?異步
一個術語的描述應該有一個目標對象吧spa
那些說同步,異步的傢伙,歷來不說這個目標對象是誰,在程序的運行過程當中,有不少參與者,到底這個同步,異步用來描述誰的呢?對象
關於同步與異步的討論,知乎上有人解釋http://www.zhihu.com/question/19732473 get
我的理解,同步與異步描述的是一種行爲方式,阻塞與非阻塞描述的是一種狀態。同步
在js中,咱們說同步,是說同步調用,舉個栗子:io
function A(){function
B();
程序
C();
im
}co
那麼A對B,C發起了同步調用,這裏的主體是A。在執行A的時候,先執行B,在執行C,他們遵循嚴格的前後順序。其實就是一個順序執行。這是同步的具體特徵。
而咱們說異步,實際上是說異步調用方式,表現出的具體特徵是改變代碼的執行順序,在js中其實就是延遲執行。
例如:
function A(){
setTimeout( B(),200);
C();
}
這裏讓B延遲執行,A運行時,會先執行C(),再執行B(),這就是A對B的異步調用。;可是setTimeout(B(),200)這個語句和C的執行,仍然保持嚴格的前後順序,只是C和B的執行順序發生了改變。
我認爲使用同步調用,異步調用去描述這種現象更加明確。
元芳,你怎麼看?