javascript是如何實現(xiàn)異步的呢-創(chuàng)新互聯(lián)

javascript是如何實現(xiàn)異步的呢,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

目前成都創(chuàng)新互聯(lián)已為超過千家的企業(yè)提供了網站建設、域名、網頁空間、成都網站托管、企業(yè)網站設計、寧江網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

我們知道javascript是單線程的,但是為什么有很多的事件處理卻是異步的呢?javascript的單線程的意思是,只有一個主線程來解釋執(zhí)行javascript代碼。那么javascript是如何實現(xiàn)異步的呢?

異步的過程

首先,主線程發(fā)起一個異步請求,相應的工作線程就接收這個請求并進行處理,期間,主線程發(fā)完請求之后就去干別的事情去了。等到工作線程的處理有了結果,瀏覽器內部就分配一個線程出來,通知主線程,剛剛發(fā)起的異步請求有了結果(這個通知過程其實是將回調函數(shù)推入消息隊列中,也叫事件隊列,也叫任務隊列),等到主線程處理完了當前調用棧中的任務,就會從這個消息隊列中讀取消息,也就是調用回調。這樣就完成了一次讀取消息的循環(huán)。

而javascript執(zhí)行代碼的機制就是不斷地從消息隊列中讀取消息回調并執(zhí)行的過程。因為每條消息(或者說每個回調)都是由相應的事件(比如鼠標點擊,ajax,定時器事件等)觸發(fā)的,所以這個過程稱之為事件循環(huán)。

異步的任務

上面把消息推送到事件隊列的這個過程中,如果工作線程處理的任務既有宏任務,也有微任務,則優(yōu)先處理宏任務,然后把對應宏任務的消息推送到宏任務消息隊列中;然后工作線程再處理微任務,接著把對應微任務的消息推送到微任務的消息隊列中。

注意,宏任務消息隊列與微任務消息隊列不是同一個隊列

當主線程處理完當前調用棧中的任務后,優(yōu)先從微任務消息隊列中讀取消息,也就是先執(zhí)行微任務的回調,等到微任務的消息隊列為空,再去讀取宏任務的消息隊列。

注意區(qū)分推送順序和讀取順序。

由此,js中的任務分為同步任務和異步任務

同步任務是指:當前主線程將要消化執(zhí)行的任務,這些任務一起形成執(zhí)行棧(executioncontextstack)。

異步任務是指:不進入主線程,而是進入任務隊列(taskqueque),即不會馬上進行的任務。

關于javascript是如何實現(xiàn)異步的呢問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。

本文題目:javascript是如何實現(xiàn)異步的呢-創(chuàng)新互聯(lián)
文章源于:http://muchs.cn/article36/ddcgsg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、自適應網站、服務器托管、網頁設計公司、電子商務、網站策劃

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司