萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> js同步、異步、阻塞與非阻塞的知識點

js同步、異步、阻塞與非阻塞的知識點

   當你們在說同步,異步,阻塞,非阻塞的時候到底在說什麼?

  一個術語的描述應該有一個目標對象吧

  那些說同步,異步的家伙,從來不說這個目標對象是誰,在程序的運行過程中,有很多參與者,到底這個同步,異步用來描述誰的呢?

  個人理解,同步與異步描述的是一種行為方式,阻塞與非阻塞描述的是一種狀態。

  在js中,我們說同步,是說同步調用,舉個栗子:

 代碼如下   function A(){
 
        B();
 
        C();
 
}

  那麼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的執行順序發生了改變。

  我認為使用同步調用,異步調用去描述這種現象更加明確。

copyright © 萬盛學電腦網 all rights reserved