摘要:而函數調用結束返回時,運行時會將棧頂的調用結構彈出。并發模型與引擎是單線程的,它的并發模型基于事件循環當線程中的同步任務執行完,執行棧為空時,則從任務隊列中取出異步任務進行處理。在當前的微任務沒有執行完成時,是不會執行下一個宏任務的。
堆/棧/隊列
在javascript中,存在調用棧 (call stack)和內存堆(memory heap) ,程序中函數依次進入棧中等待執行,若執行時遇到異步方法,該異步方法會被添加到用于回調的任務隊列(task queue)中,【即JavaScript執行引擎的單線程擁有一個調用棧、內存堆和一個任務隊列】
調用棧 (call stack):CallStack是用來處理函數調用與返回的。特點是先進后出,每次調用一個函數,Javascript運行時會生成一個新的調用結構壓入CallStack。而函數調用結束返回時,JavaScript運行時會將棧頂的調用結構彈出。由于棧的LIFO特性,每次彈出的必然是最新調用的那個函數的結構。函數調用會形成了一個堆棧幀,存放基本數據類型的變量并發模型 與 EventLoop內存堆(memory head):引用數據類型被存放在堆中,在我們進行淺復制時,我們改變的只是引用數據類型在棧內存中的引用地址,實際上它在堆內存中的引用地址仍然沒有發生變化
任務隊列(task queue):javaScript 運行時包含了一個待處理的任務隊列。
javascript引擎是單線程的,它的并發模型基于Event Loop(事件循環)
當線程中的同步任務執行完,執行棧為空時,則從任務隊列(task queue)中取出異步任務進行處理。這個處理過程包含了調用與這個任務相關聯的函數(以及因而創建了一個初始堆棧幀)。當執行棧再次為空的時候,也就意味著該任務處理結束,從任務隊列中取出下一個異步任務進行處理,不斷重復,這個過程是循環不斷的, 所以整個的這種運行機制又稱為Event Loop(事件循環).Task Queue 任務隊列
任務隊列有宏任務隊列與微任務隊列,每次事件循環的時候,會先執行宏任務隊列中的任務,然后再執行微任務隊列中的任務。 在當前的微任務沒有執行完成時,是不會執行下一個宏任務的。
宏任務:script(全局任務), setTimeout, setInterval, setImmediate, I/O, UI rendering.
微任務:process.nextTick, Promise, Object.observer, MutationObserver.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109524.html
摘要:需要注意的是,定時器只是將事件插入了任務隊列,必須等到當前代碼執行棧執行完,主線程才會去執行它指定的回調函數。如果當前代碼耗時很長,有可能要等很久,所以并沒有辦法保證,回調函數一定會在指定的時間執行。這也引申出的并發模型。 一、JavaScript的單線程 眾所周知,JavaScript的一大特點就是單線程,但是我們有沒有思考過它為什么不能是多線程的? 我們假定JavaScript有兩...
摘要:規范中定義了瀏覽器何時進行渲染更新,了解它有助于性能優化。結合一些資料,對上邊規范給出一些理解有誤請指正每個線程都有自己的。列為,列為,列為。我們都知道是單線程,渲染計算和腳本運行共用同一線程網絡請求會有其他線程,導致腳本運行會阻塞渲染。 本文轉自blog 轉載請注明出處 異步的思考 event loops隱藏得比較深,很多人對它很陌生。但提起異步,相信每個人都知道。異步背后的靠山就是...
摘要:回調函數任務完成的時候,需要執行哪段代碼來處理呢當然是回調函數了。事件處理器和回調函數類似。但是特定的事件處理器在瀏覽器進入異步事件驅動階段時就會針對特定的事件注冊。當事件對象返回到執行線程時,事件處理器也會同時進入執行棧中執行。 Event Loop(事件輪詢)機制是一個經常把人搞暈的東東。我不敢說我完全明白,只是在此談談我的淺見。 事件的處理 瀏覽器是一個事件驅動(event-dr...
摘要:由于是單線程的,這些方法就會按順序被排列在一個單獨的地方,這個地方就是所謂執行棧。事件隊列每次僅執行一個任務,在該任務執行完畢之后,再執行下一個任務。 Event Loop 是 JavaScript 異步編程的核心思想,也是前端進階必須跨越的一關。同時,它又是面試的必考點,特別是在 Promise 出現之后,各種各樣的面試題層出不窮,花樣百出。這篇文章從現實生活中的例子入手,讓你徹底理解 E...
閱讀 2657·2023-04-26 00:07
閱讀 2440·2021-11-15 11:37
閱讀 651·2021-10-19 11:44
閱讀 2180·2021-09-22 15:56
閱讀 1736·2021-09-10 10:50
閱讀 1511·2021-08-18 10:21
閱讀 2579·2019-08-30 15:53
閱讀 1639·2019-08-30 11:11