執行緒與同步、非同步概念


Posted by hoyi-23 on 2021-05-17

JavaScript 單執行緒(Single Thread)

執行緒是針對於系統的執行。

單執行緒

無法同時執行多項任務,需要依順序一個一個完成。

多執行緒

可以同時執行多項任務

JavaScript 非同步概念(Async)

同步、非同步針對於程式語言本身。

同步

任務會是依次執行,不會突然跳掉下個任務。

非同步

JS的任務一樣是依據同步的概念執行。
非同步的部分不會先執行,會先移到事件佇列,等同步完成的任務都完成後,才會執行事件佇列。
事件佇列
執行時,執行fn1()>fn2()>fn3()-fn3-1()先放置於事件佇列>fn4()-同步任務結束後>fn3-1()。
事件佇列內的任務,會在最後面(同步任務完成後)才執行。

function fn1(){};
function fn2(){};
function fn3(){
    fn3-1(){}; //非同步
    };
function fn4(){};

//執行
fn1();
fn2();
fn3();
fn4();

練習題

for(var i=0; i<3; i++){
    setTimeout(function(){
        console.log(i);
    },0);
}

解析
雖然說setTimeout設定是0秒即執行,但由於是非同步的,因此在同步任務完成前,會先放置到事件佇列,最後才執行。

for(var i=0; i<3; i++){ //會一直到 i === 3 ,跑完後才會執行setTimeout。
    setTimeout(function(){
        console.log(i);
    },0);
} // 結果是 3

#同步 #非同步 #執行緒







Related Posts

[ 紀錄 ] 實戰練習 - 部落格 (以 php 實作前端 + 後端)

[ 紀錄 ] 實戰練習 - 部落格 (以 php 實作前端 + 後端)

後端基礎問卷 - 網際網路&前端

後端基礎問卷 - 網際網路&前端

Laravel and Cypress integration

Laravel and Cypress integration


Comments