Javascript單線程實現
阿新 • • 發佈:2018-03-24
輔助 區別 ole 標準 rip alt span body 一段
對於Javascript的單線程實現一直一知半解的。開始以為很難,但是仔細看一下感覺還好。
首先明白一點,js是單線程的,也就是說js只能在同一時刻處理一段代碼。但是js運行的環境瀏覽器卻是可以多線程的,它具有多個線程,js代碼處理引擎線程、事件觸發線程、http請求線程、計時器觸發線程。多者輔助,實現了js的異步處理。
準確的來說。這個實際上就是說,js引擎線程就是主程序。一旦碰上相應的例如計時器產生了,就先將這個定時器內部的代碼先掛起,等到需要執行的時間到了,讓計時器的線程提醒js該執行剛剛的代碼了。js這樣就達到了偽異步。
setTimeout(function(){ console.log(‘settime‘); }, 0); console.log(‘now‘);
例如以上輸出的就實現輸出now,然後輸出settime。
這個是讓我覺得最清楚的一個圖了。藍色整體代表著js引擎中要執行的代碼部分。藍色javascript的塊是現在要執行的代碼部分當我們想要出發interval或者點擊事件等得時候事情都需要往後排。直到當前執行結束之後再進行處理後面的得代碼。但是settimeout和setinterval還有一些區別,settimeout如果產生了,就將事情放到等待處理的序列中,但是settimeout每次毀掉觸發的時候只會保留第一次需要執行的代碼部分,如果第二次需要觸發的時候,其中js引擎有使用的時候,就會將這一次回調觸發拋棄。直到js部分閑下來了,就會立刻執行。
詳細標準:
http://www.cnblogs.com/sprying/archive/2013/05/26/3100639.html
Javascript單線程實現