国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JAVASCRIPT與單個線程的工作

汽車玩家 ? 來源:今日頭條 ? 作者:魏建民 ? 2020-05-05 22:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

事件循環是用來理解JavaScript的最重要的方面之一。這篇文章旨在解釋JavaScript如何與單個線程一起工作的細節,以及它如何處理異步函數。

JavaScript代碼運行是單線程。一次只執行一件事。這實際上是一個非常有用的限制,因為它簡化了很多程序,從而不必擔心并發問題。

您只需要注意編寫代碼的方式,避免任何可能阻塞線程的內容,如同步調用或無限循環。

通常,在大多數瀏覽器中,每個瀏覽器都有一個事件循環,以使每個進程隔離,并避免web頁面具有無限循環或繁重的處理來阻塞整個瀏覽器。

你最需要擔心的是,您的代碼將在單個事件循環上運行,并在編寫代碼時考慮到這一點,以避免阻塞它。

阻止事件循環

任何花費太長時間將控制權返回給事件循環的JavaScript代碼都會阻止頁面中任何JavaScript代碼的執行,甚至阻止UI線程,用戶也無法點擊,滾動頁面等等。

幾乎所有JavaScript中的I / O操作都是非阻塞的。網絡請求,Node.js文件系統操作等。阻塞是個例外,這就是為什么JavaScript基于回調,以及最近的promises和async / await。

調用堆棧

調用堆棧是LIFO隊列(Last In,FirstOut)。事件循環不斷檢查調用堆棧以查看是否存在需要運行的任何函數。

在執行此操作時,它會將它找到的任何函數調用添加到調用堆棧并按順序執行每個調用。

一個簡單的事件循環說明:

JAVASCRIPT與單個線程的工作

當此代碼運行時,首先foo()調用。在foo()我們第一次調用bar(),然后我們調用baz()。

排隊功能執行

上面的例子運行特點:JavaScript找到要執行的東西,按順序運行它們。

讓我們看看如何推遲函數直到堆棧清除:

用例setTimeout(()=> {}), 0)是調用一個函數,但是一旦執行了代碼中的每個其他函數就執行它。

JAVASCRIPT與單個線程的工作

當此代碼運行時,首先調用foo()。在foo()里面我們首先調用setTimeout,bar作為參數傳遞,然后我們指示它盡可能快地運行,將0作為計時器傳遞。然后我們調用baz()。

消息隊列

調用setTimeout()時,瀏覽器或Node.js啟動計時器。當計時器到期,我們將0作為超時,回調函數立即被放入消息隊列中。

消息隊列也是用戶發起的事件(如單擊事件、鍵盤事件或獲取響應)在代碼有機會對其作出響應之前排隊的地方?;蛘呦駉nLoad這樣的DOM事件。

循環優先處理調用堆棧,它首先處理在調用堆棧中找到的所有東西,一旦調用堆棧中沒有任何東西,它就會去獲取事件隊列中的東西。

我們不必等待像setTimeout,fetch或其他東西這樣的函數來完成自己的工作,因為它們是由瀏覽器提供的,并且它們運行在自己的線程中。

ES6作業隊列

ECMAScript 2015引入了Promises使用的作業隊列概念(也在ES6 / ES2015中引入)。這是一種盡快執行異步函數結果的方法,而不是放在調用堆棧的末尾。

在當前函數結束之前解析的Prom將在當前函數之后立即執行。

我覺得在游樂園里過山車的比喻很好:消息隊列將你放在隊列的后面,在所有其他人的后面,你將不得不等待輪到你,而作業隊列是快速通票這可以讓你在完成上一個之后再騎一次。

JAVASCRIPT與單個線程的工作

這是Promises(和Async / await,它建立在promises上)和普通的舊異步函數setTimeout()或其他平臺API 之間的巨大差異。

javascrit的事件循環是這門語言中非常重要且基礎的概念。清楚的了解了事件循環的執行順序和每一個階段的特點,可以使我們對一段異步代碼的執行順序有一個清晰的認識,從而減少代碼運行的不確定性。合理的使用各種延遲事件的方法,有助于代碼更好的按照其優先級去執行。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1304

    瀏覽量

    74453
  • javascript
    +關注

    關注

    0

    文章

    526

    瀏覽量

    56321
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    摩爾線程正式開源TileLang-MUSA項目

    近日,摩爾線程正式開源TileLang-MUSA項目,實現對TileLang編程語言的完整支持。該項目已成功在摩爾線程多代全功能GPU上完成功能驗證與特性開發,旨在通過高層抽象與編譯器優化,大幅降低開發門檻,為國產算力平臺提供更高效的AI與高性能計算開發體驗。
    的頭像 發表于 02-11 16:57 ?1242次閱讀

    解析Linux的進程、線程和協程

    允許在單個線程內實現多個協程的并發執行。協程在執行過程中可以主動掛起和恢復,這使得編寫高效的異步代碼變得更加容易。協程通常用于處理I/O密集型任務,能夠提高程序的響應性能。 協程的特點包括: (1
    發表于 12-22 11:00

    線程的系統

    線程系統的事件響應也是在中斷中完成的,但事件的處理是在線程中完成的。在多線程系統中,線程跟中斷一樣,也具有優先級,優先級高的線程會被優先執
    發表于 12-08 07:55

    Linux多線程對比單線程的優勢

    在Linux系統中,線程是操作系統能夠進行運算調度的最小單位。線程被包含在進程之中,是進程中的實際運行單位。一個進程可以擁有多個線程,這些線程共享相同的內存空間和系統資源。
    發表于 12-01 06:11

    國家信息中心與摩爾線程達成戰略合作

    10月21日上午,國家信息中心與摩爾線程在北京舉行戰略合作協議簽約儀式。國家信息中心主任徐強,摩爾線程創始人、董事長兼首席執行官張建中出席簽約儀式。國家信息中心副主任周民與摩爾線程聯合創始人兼首席運營官周苑代表雙方簽署戰略合作協
    的頭像 發表于 10-23 15:52 ?543次閱讀

    rtt中建兩個線程a和b,怎么確保線程a執行完立刻切到線程b?

    怎么獲取從線程開始切換到切換完成用的總的CPU時鐘節拍數量?
    發表于 10-10 06:37

    tcpip線程被mu0鎖住導致網絡線程無法使用怎么解決?

    各位好,我使用rtthread開發STM32F407VGT6芯片,程序有多個線程,每個線程都會創建一個socket,建立tcp連接或者udp連接,現在出現一個問題,程序長時間運行有概率死機,但是沒有
    發表于 09-29 06:41

    線程刪除時遇到斷言,是什么原因導致的?

    在一個線程中調用線程刪除函數刪除另外一個線程,這2個線程的優先級是相等的,被刪除的線程也是動態創建的,出現了下面的斷言內容,一般是什么情況導
    發表于 09-12 06:08

    rtth studio中nano 如何創建動態線程?

    有沒有大佬,可以說一下為什么靜態線程可以正常使用,動態線程怎么也使用不了。 具體需要什么配置才能使用動態線程創建。謝謝!
    發表于 09-11 06:01

    【HZ-T536開發板免費體驗】—— linux創建線程

    自己的私有資源。 在linux系統中,線程狀態通常反映了當前線程的當前活動和執行階段。 主要分為: 1。運行轉態 2。阻塞轉態 3。終止狀態 如何區分單線程和多線程? 在
    發表于 09-01 21:31

    rtt studio中nano 如何創建動態線程

    有沒有大佬,可以說一下為什么靜態線程可以正常使用,動態線程怎么也使用不了。 具體需要什么配置才能使用動態線程創建。謝謝!
    發表于 08-22 06:19

    UVC+MSC實現中MSC線程未運行的原因?

    我正在嘗試使用 EZUSB 運行 UVC + MSC。我有以下內容。但看起來只有 UVC 線程在運行,而 MSC 沒有運行。fw 不響應 MSC 命令。我確保 LPM 已被禁用,只是為了檢查傳感器
    發表于 07-16 07:08

    深度剖析 RT-Thread 線程調度流程

    RT-Thread調度第一個線程的主要流程分如下:rtthread_startup:RTT的啟動函數,主要負責板級驅動,調度器,系統線程初始化,啟動調度的工作
    的頭像 發表于 06-25 18:24 ?1767次閱讀
    深度剖析 RT-Thread <b class='flag-5'>線程</b>調度流程

    線程的安全注意事項

    線程安全是指多個線程同時訪問或修改共享資源時,能夠保證程序的正確性和可靠性。 開發者選擇TaskPool或Worker進行多線程開發時,在TaskPool和Worker的工作
    發表于 06-20 07:49

    RTOS如何在FX3中工作

    大家好, 我正在使用 FX3 進行一個項目。 我想知道 RTOS 調度是如何工作的。 我知道調用“CyU3PKernelEntry();”后 RTOS 就會開始工作。 如果我只注冊一個應用程序線程。 我的
    發表于 05-06 13:20