JavaScript-執行緒、同步與非同步

單執行緒(Single Threaded)

在程式碼裡面都有很多指令,單執行緒代表一次只執行一個指令。

同步執行(Synchronous)

對程式語言來說,是一次一個,而且照出現順序一行一行執行。

非同步執行(Asynchronous)

在同一時間中,不只一個在執行。

JavaScript引擎

JavaScript引擎本身並非獨立存在,比如說在瀏覽器中,JavaScript並非唯一的東西,還會有其他的引擎處理別的程式,像是rendering engine會顯示畫面到螢幕中,或是也有負責處理HTTP請求資料的。

JavaScript引擎外部可以跟其他的引擎相互溝通,而且可以是非同步處理,也就是說JavaScript引擎、rendering engine、HTTP請求,這三者可以同時都在進行處理、執行。

然而,JavaScript引擎本身,是單執行緒和同步執行的。也就是說,在JavaScript引擎裡面,程式碼是一行一行被解讀。

總結,JavaScript引擎本身是單執行緒、同步執行,而向外的溝通、請求可以是非同步執行

事件佇列(Event Queue)

前面提到,JavaScript引擎本身是同步執行,但是當JavaScript引擎接收到從外部來的一個需要處理事件時,在JavaScript引擎中會先被放到等待列,也就是先放進事件佇列(Event Queue)。

JavaScript引擎還是會先處理完執行堆處理完,直到b()結束、a()結束、全域結束都從執行堆中pop掉,當執行堆是空的時候,JavaScript才會注意到Event Queue。

首先處理click事件,看到該事件觸發執行clickHandler(),所以就在執行堆中創建一個執行環境給它。當該事件處理完畢,被pop掉之後,執行堆中又被淨空了,才再繼續處理下一個佇列事件。

© 2020 Leah's Blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero