亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
JavaScript如何處理單個線程並發(fā)
事件循環(huán)在行動中:任務與微型箱
常見的陷阱和實際含義
1。濫用微掩埋可以阻止UI
2。在異步代碼中訂單重要
Node.js vs瀏覽器:輕微差異
關鍵要點
首頁 web前端 js教程 掌握JavaScript事件循環(huán)和並發(fā)模型

掌握JavaScript事件循環(huán)和並發(fā)模型

Jul 29, 2025 am 04:01 AM
事件循環(huán)

JavaScript是單線程,但通過事件循環(huán)處理並發(fā),該事件循環(huán)可以協(xié)調(diào)呼叫堆棧,回調(diào)隊列(任務隊列),Microtask隊列和Web API;當異步操作完成後,將其回調(diào)放置在任務隊列(例如Settiemout)或Microtask隊列(例如,Promise..then)中;事件循環(huán)在每個任務之前處理所有微型掩體,解釋了為什麼即使零延遲也要在Settimeout之前進行回調(diào);這導致示例中的輸出順序1、4、3、2; MicroTask濫用可以阻止UI,因為渲染等待Microtask隊列清除; node.js添加了與process.nexttick()的複雜性,該nexttick()在其他微型箱之前運行,使其優(yōu)先級高於承諾。了解這些機制有助於避免正時錯誤和性能問題。

掌握JavaScript事件循環(huán)和並發(fā)模型

JavaScript的事件循環(huán)和並發(fā)模型是理解語言如何處理異步操作的基礎,即使它在單個線程上運行。儘管是單線程,但JavaScript可以執(zhí)行非阻滯I/O並隨著時間的推移處理多個任務 - 感謝其事件循環(huán)和運行時環(huán)境(例如node.js或瀏覽器)。讓我們清楚地分解它。

掌握JavaScript事件循環(huán)和並發(fā)模型

JavaScript如何處理單個線程並發(fā)

JavaScript以單個呼叫堆棧執(zhí)行代碼的核心 - 僅一次操作一次運行。但是,如果它是單線程,它如何設法處理諸如計時器,HTTP請求或用戶事件之類的異步任務,而無需凍結整個應用程序?

答案在於其並發(fā)模型,該模型依賴於:

掌握JavaScript事件循環(huán)和並發(fā)模型
  • 呼叫堆棧
  • 回調(diào)隊列(或任務隊列)
  • 微型箱隊列
  • 事件循環(huán)

這些組件借助Web API (瀏覽器)或C綁定(以Node.js為單位)來卸載異步操作。

例如:

掌握JavaScript事件循環(huán)和並發(fā)模型
 console.log(“ 1”);

settimeout(()=> {
  console.log(“ 2”);
},0);

Promise.resolve()。然後(()=> {
  console.log(“ 3”);
});

console.log(“ 4”);

您可能希望輸出為1, 2, 3, 4 ,但實際上是:

 1
4
3
2

為什麼?由於事件循環(huán)如何優(yōu)先考慮不同類型的回調(diào)。


事件循環(huán)在行動中:任務與微型箱

當異步操作完成後,他們的回調(diào)將以不同的排隊方式放置:

  • 任務隊列(回調(diào)隊列) :持有setTimeout , setInterval ,I/O,DOM Events等的回調(diào)。
  • MicroTask隊列:持有Promise.then/catch/finally queueMicrotaskMutationObserver

事件循環(huán)按特定順序檢查這些隊列:

  1. 運行所有同步代碼(調(diào)用堆棧)。
  2. 堆棧為空後,(按順序)處理所有微型箱。
  3. 然後,從任務隊列中選擇一個任務並運行它。
  4. 重複。

這意味著即使在計時器之後添加它們, Microtasks始終在任何新任務之前運行

回到我們之前的示例:

 console.log(“ 1”); //同步
settimeout(()=> console.log(“ 2”)); // 任務
promise.resolve()。然後(()=> console.log(“ 3”)); //微型箱
console.log(“ 4”); //同步

執(zhí)行流:

  • 日誌“ 1”
  • setTimeout →轉到Web API,後來入選任務
  • 承諾已解決→小件排隊
  • 日誌“ 4”
  • 呼叫堆??铡录h(huán)檢查Microtask隊列→運行“ 3”
  • 然後從任務隊列→運行“ 2”

因此: 1, 4, 3, 2


常見的陷阱和實際含義

了解微型和任務之間的差異有助於避免性能問題和邏輯錯誤。

1。濫用微掩埋可以阻止UI

由於Microtasks在下一個任務之前(以及渲染之前)運行,因此淹沒Microtask隊列可以延遲渲染和用戶交互。

讓計數(shù)= 0;
功能recurse(){
  數(shù)數(shù) ;
  console.log(count);
  promise.resolve()。然後(recurse);
}
recurse();

這會創(chuàng)建無限的微型封鎖 -瀏覽器無法呈現(xiàn),響應點擊或運行計時器,直到耗盡了微型箱隊列為止。它有效地阻止了UI。

2。在異步代碼中訂單重要

混合setTimeout , PromisequeueMicrotask可能會導致微妙的時機錯誤:

 settimeout(()=> console.log(“ timeout”),0);
queuemicrotask(()=> console.log(“ micro1”));
promise.resolve()。然後(()=> console.log(“ promise”));
queuemicrotask(()=> console.log(“ micro2”));

輸出:

 micro1
承諾
micro2
暫停

無論何時安排,所有微型掩體都在超時回調(diào)之前執(zhí)行。


Node.js vs瀏覽器:輕微差異

儘管核心模型是相同的,但node.js有其他怪癖:

  • process.nextTick() :一個在其他微型掩體之前運行的特殊微型箱(甚至承諾)。
 promise.resolve()。然後(()=> console.log(“ promise”));
process.nexttick(()=> console.log(“ nextTick”));

輸出node.js:

 NextTick
承諾

因此, nextTick優(yōu)先級高於承諾的Microtasks,請仔細使用它。


關鍵要點

  • JavaScript是單線程,但使用事件循環(huán)來處理並發(fā)。
  • 事件循環(huán)不斷檢查:
    • 調(diào)用堆棧(運行同步代碼)
    • Microtask隊列(運行全部)
    • 任務隊列(運行一個)
  • 任務(計時器,I/O)之前運行的Microtasks (承諾, queueMicrotask )。
  • 避免使用無限的微型循環(huán) - 它們阻止事件循環(huán)。
  • 在node.js中, process.nextTick()優(yōu)先級高於承諾的微型釋放。

了解此模型有助於調(diào)試時正式問題,優(yōu)化性能並編寫更可預測的異步代碼。

基本上,事件循環(huán)不是魔術,而是一個循環(huán),可以通過仔細管理何時運行的操作來保持應用程序的響應。

以上是掌握JavaScript事件循環(huán)和並發(fā)模型的詳細內(nèi)容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
Python非同步程式設計: 實現(xiàn)高效並發(fā)的非同步程式碼之道 Python非同步程式設計: 實現(xiàn)高效並發(fā)的非同步程式碼之道 Feb 26, 2024 am 10:00 AM

1.為什麼要使用非同步程式設計?傳統(tǒng)程式設計使用阻塞式I/O,這表示程式會等待某個操作完成,然後才能繼續(xù)執(zhí)行。這對於處理單一任務可能很有效,但對於處理大量任務時,可能會導致程式變慢。非同步程式設計則打破了傳統(tǒng)阻塞式I/O的限制,它使用非阻塞式I/O,這意味著程式可以將任務分發(fā)到不同的執(zhí)行緒或事件循環(huán)中執(zhí)行,而無需等待任務完成。這允許程式同時處理多個任務,提高程式的效能和效率。 2.python非同步程式設計的基礎Python非同步程式設計的基礎是協(xié)程和事件循環(huán)。協(xié)程是允許函數(shù)在暫停和恢復之間切換的函數(shù)。事件循環(huán)則負責調(diào)度

nodejs可視化學習:事件循環(huán)【動圖示範】 nodejs可視化學習:事件循環(huán)【動圖示範】 Nov 25, 2022 pm 08:56 PM

這篇文章帶大家透過動畫學習Node事件循環(huán),希望對大家有幫助!

Python非同步程式設計: 揭秘非同步程式設計的本質, 最佳化程式碼效能 Python非同步程式設計: 揭秘非同步程式設計的本質, 最佳化程式碼效能 Feb 26, 2024 am 11:20 AM

非同步編程,英文AsynchronousProgramming,是指程式中的某些任務可以並發(fā)地執(zhí)行,而無需等待其他任務完成,從而提高程式的整體運作效率。在python中,asyncio模組是實現(xiàn)非同步程式設計的主要工具,它提供了協(xié)程、事件循環(huán)和其他非同步程式設計所需的元件。協(xié)程:協(xié)程(Coroutine)是一種特殊的函數(shù),它可以被暫停然後恢復執(zhí)行,就像線程一樣,但協(xié)程比線程更輕量級,記憶體消耗更低。協(xié)程由async關鍵字聲明,並在await關鍵字暫停執(zhí)行。事件循環(huán):事件循環(huán)(EventLoop)是非同步程式設計中的

PHP程式中的事件循環(huán)最佳實踐 PHP程式中的事件循環(huán)最佳實踐 Jun 06, 2023 pm 10:30 PM

隨著Web應用程式的成長和複雜性的提高,事件驅動程式設計成為了PHP程式設計師的常見選擇。 PHP程式中的事件循環(huán)機制使得程式可以非同步地處理多個並發(fā)請求,從而提高了效能和可擴展性。然而,要正確地使用事件循環(huán)機制,需要採用最佳實務來確保程序的穩(wěn)定性和可維護性。本文將討論PHP程序中的事件循環(huán)最佳實務。使用正確的事件庫PHP有很多不同的事件庫可以選擇,例如ReactPH

揭秘 Python asyncio:釋放非同步程式設計的無限可能 揭秘 Python asyncio:釋放非同步程式設計的無限可能 Mar 04, 2024 am 09:37 AM

簡介在現(xiàn)代計算中,非同步程式設計正變得越來越流行。這是一種允許應用程式同時處理多個任務的程式設計範例,從而提高效率並最大限度地利用電腦資源。 pythonasyncio是一個專為非同步程式設計而設計的程式庫,它提供了廣泛的功能和工具,使開發(fā)人員能夠輕鬆編寫高效能和可擴展的應用程式。協(xié)程和事件循環(huán)asyncio的核心概念是協(xié)程和事件循環(huán)。協(xié)程是一種協(xié)作式多任務機制,它允許函數(shù)在暫停執(zhí)行並等待事件發(fā)生時放棄控制。事件循環(huán)是一個無限循環(huán),它監(jiān)視事件並根據(jù)需要調(diào)度協(xié)程。以下示範程式碼展示了一個簡單的協(xié)程:importasyn

您能否討論事件循環(huán)概念及其與異步PHP的相關性(例如,與ReactPhp,Swoole)討論? 您能否討論事件循環(huán)概念及其與異步PHP的相關性(例如,與ReactPhp,Swoole)討論? Jun 05, 2025 am 12:08 AM

是的,事件循環(huán)在現(xiàn)代PHP開發(fā)中非常重要,尤其在構建實時或高並發(fā)系統(tǒng)時。事件循環(huán)作為異步編程的核心機制,使PHP能夠處理多個任務而無需等待每個操作完成,ReactPHP和Swoole通過不同的方式實現(xiàn)事件循環(huán):ReactPHP採用Node.js風格的回調(diào)模型,適合小型異步工具;Swoole則嵌入優(yōu)化的事件循環(huán)並支持協(xié)程,便於與現(xiàn)有框架集成。使用事件循環(huán)可提升資源利用率、實現(xiàn)低延遲和實時功能,但需避免阻塞函數(shù)、注意共享狀態(tài)風險,並進行負載測試。

Swoole進階:掌握事件循環(huán)機制與實現(xiàn) Swoole進階:掌握事件循環(huán)機制與實現(xiàn) Jun 14, 2023 pm 09:46 PM

隨著Web應用變得越來越複雜,對持續(xù)高並發(fā)和低延遲的需求也越來越高。這意味著傳統(tǒng)的請求-響應式程式設計模型已經(jīng)無法滿足需求。這時候,非同步程式設計和事件驅動程式就成為了非常重要的工具,Swoole提供了這兩種程式設計模型的支援。這篇文章將介紹Swoole的事件循環(huán)機制以及如何實作它。什麼是事件循環(huán)?事件循環(huán)是一種I/O模型,它使用作業(yè)系統(tǒng)提供的事件通知機制來等待和處理事件

Python非同步程式設計: 並發(fā)程式設計的利器, 揭開其神秘面紗 Python非同步程式設計: 並發(fā)程式設計的利器, 揭開其神秘面紗 Feb 26, 2024 am 11:19 AM

python非同步程式設計是一種強大的技術,可以實現(xiàn)高並發(fā)、高效能的程式。它透過使用協(xié)程和事件循環(huán)來實現(xiàn)並發(fā),從而避免了傳統(tǒng)多執(zhí)行緒程式設計中的鎖定和同步問題。協(xié)程:協(xié)程是一種可以暫停和恢復執(zhí)行的函數(shù)。當一個協(xié)程被暫停時,它會將它的狀態(tài)保存在記憶體中,然後讓出控制權給另一個協(xié)程。當另一個協(xié)程執(zhí)行完畢後,被暫停的協(xié)程可以從它上次停止的地方繼續(xù)執(zhí)行。事件循環(huán):事件循環(huán)是一個不斷循環(huán)的函數(shù),它從作業(yè)系統(tǒng)取得事件,然後將這些事件分發(fā)給對應的協(xié)程。當一個協(xié)程需要等待某個事件時,它可以將自己註冊到事件循環(huán)中。當事件發(fā)生時,

See all articles