在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

JAVASCRIPT與單個線程的工作

汽車玩家 ? 來源:今日頭條 ? 作者:魏建民 ? 2020-05-05 22:07 ? 次閱讀

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

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

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

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

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

阻止事件循環(huán)

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

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

調用堆棧

調用堆棧是LIFO隊列(Last In,F(xiàn)irstOut)。事件循環(huán)不斷檢查調用堆棧以查看是否存在需要運行的任何函數(shù)。

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

一個簡單的事件循環(huán)說明:

JAVASCRIPT與單個線程的工作

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

排隊功能執(zhí)行

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

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

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

JAVASCRIPT與單個線程的工作

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

消息隊列

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

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

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

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

ES6作業(yè)隊列

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

在當前函數(shù)結束之前解析的Prom將在當前函數(shù)之后立即執(zhí)行。

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

JAVASCRIPT與單個線程的工作

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

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

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

    關注

    2

    文章

    1276

    瀏覽量

    70525
  • javascript
    +關注

    關注

    0

    文章

    525

    瀏覽量

    54346
收藏 人收藏

    評論

    相關推薦

    JavaScript與Rust和WebAssembly集成

    偶然一次機會,接觸了Rust的代碼。當時想給團隊小伙伴做演示,發(fā)現(xiàn)自己并不能在移動端按照文檔生成演示demo。我就想,要是Rust代碼能轉化成JavaScript就好了。結果一搜,還真有。
    的頭像 發(fā)表于 01-24 15:43 ?327次閱讀
    <b class='flag-5'>JavaScript</b>與Rust和WebAssembly集成

    SciChart—高性能的JavaScript圖表和圖形庫

    使用 SciChart 的 JavaScript 圖表庫為您的 JS 應用程序發(fā)現(xiàn)終極解決方案。 使用 WebGL 創(chuàng)建動態(tài)、高速的圖表和圖形,非常適合實時處理復雜的數(shù)據(jù)可視化。使用我們強大而靈活
    的頭像 發(fā)表于 01-22 10:15 ?446次閱讀
    SciChart—高性能的<b class='flag-5'>JavaScript</b>圖表和圖形庫

    Spire.XLS for JavaScript——多功能JavaScript電子表格庫(一)

    Spire.XLS for JavaScript 是一款專為開發(fā)人員設計的 JavaScript Excel 工具庫,支持在任何 JavaScript 環(huán)境下直接創(chuàng)建、讀取、編輯和轉換 Excel
    的頭像 發(fā)表于 01-21 09:29 ?341次閱讀
    Spire.XLS for <b class='flag-5'>JavaScript</b>——多功能<b class='flag-5'>JavaScript</b>電子表格庫(一)

    javascript:void(0) 是否影響SEO優(yōu)化

    使用 javascript:void(0) 確實可能對SEO優(yōu)化產生負面影響 。以下是關于 javascript:void(0) 對SEO影響的具體分析: 搜索引擎爬蟲的理解問題 搜索引擎爬蟲(如
    的頭像 發(fā)表于 12-31 16:08 ?402次閱讀

    javascript:void(0) 的作用是什么

    javascript:void(0) 在 HTML 和 JavaScript 中是一個常見的表達式,主要用來創(chuàng)建一個無操作的鏈接(通常是 標簽)或者阻止默認事件處理。具體來說,它的作用有以下幾點
    的頭像 發(fā)表于 12-31 15:55 ?1463次閱讀

    socket 多線程編程實現(xiàn)方法

    在現(xiàn)代網(wǎng)絡編程中,多線程技術被廣泛應用于提高服務器的并發(fā)處理能力。Socket編程是網(wǎng)絡通信的基礎,而將多線程技術應用于Socket編程,可以顯著提升服務器的性能。 多線程編程的基本概念 多
    的頭像 發(fā)表于 11-12 14:16 ?778次閱讀

    摩爾線程完成股改,籌備上市

    近日,摩爾線程智能科技(北京)股份有限公司(簡稱“摩爾線程”)宣布已完成股改,并正積極籌備上市。據(jù)國家企業(yè)信用信息公示系統(tǒng)最新查詢結果顯示,摩爾線程的市場主體類型在10月28日已從其他有限責任公司
    的頭像 發(fā)表于 11-12 14:15 ?926次閱讀

    摩爾線程與超圖軟件完成產品兼容認證

    。 據(jù)悉,為了確保產品間的兼容性,摩爾線程與超圖軟件進行了嚴格的測試工作。經(jīng)過雙方的努力,適配調優(yōu)后的軟件在摩爾線程GPU上展現(xiàn)出了卓越的性能表現(xiàn)。測試結果顯示,軟件在摩爾線程GPU上
    的頭像 發(fā)表于 10-24 10:25 ?802次閱讀

    Python中多線程和多進程的區(qū)別

    Python作為一種高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進程的概念、區(qū)別以及如何使用線程池與進程池來提高并發(fā)執(zhí)行效率。
    的頭像 發(fā)表于 10-23 11:48 ?812次閱讀
    Python中多<b class='flag-5'>線程</b>和多進程的區(qū)別

    CPU線程和程序線程的區(qū)別

    CPU的線程與程序的線程在概念、作用、實現(xiàn)方式以及性能影響等方面存在顯著差異。以下是對兩者區(qū)別的詳細闡述,旨在深入探討這一技術話題。
    的頭像 發(fā)表于 09-02 11:18 ?1741次閱讀

    一文掌握Python多線程

    使用線程可以把占據(jù)長時間的程序中的任務放到后臺去處理。
    的頭像 發(fā)表于 08-05 15:46 ?1110次閱讀

    鴻蒙語言基礎類庫:ohos.convertxml xml轉換JavaScript

    轉換xml文本為JavaScript對象。
    的頭像 發(fā)表于 07-08 15:54 ?633次閱讀
    鴻蒙語言基礎類庫:ohos.convertxml  xml轉換<b class='flag-5'>JavaScript</b>

    鴻蒙開發(fā):線程模型

    FA模型下的線程主要有如下三類
    的頭像 發(fā)表于 06-24 17:27 ?604次閱讀
    鴻蒙開發(fā):<b class='flag-5'>線程</b>模型

    探索虛擬線程:原理與實現(xiàn)

    虛擬線程的引入與優(yōu)勢 在Loom項目之前,Java虛擬機(JVM)中的線程是通過java.lang.Thread類型來實現(xiàn)的,這些線程被稱為平臺線程。 然而,平臺
    的頭像 發(fā)表于 06-24 11:35 ?479次閱讀
    探索虛擬<b class='flag-5'>線程</b>:原理與實現(xiàn)

    鴻蒙開發(fā):【線程模型】

    管理其他線程的ArkTS引擎實例,例如使用TaskPool(任務池)創(chuàng)建任務或取消任務、啟動和終止Worker線程
    的頭像 發(fā)表于 06-13 16:38 ?604次閱讀
    鴻蒙開發(fā):【<b class='flag-5'>線程</b>模型】
    主站蜘蛛池模板: 欧美xxxx极品流血 | 欧美色爱综合 | 成人国产三级在线播放 | 天天拍夜夜添久久精品中文 | 羞羞漫画喷水漫画yy漫画 | 女人色网 | 国产三级黄色毛片 | 成人av电影在线 | 97青草| 日本免费不卡在线一区二区三区 | 亚洲免费毛片 | 日韩一级特黄毛片在线看 | 看亚洲a级一级毛片 | 久久三级国产 | 国产精品夜夜春夜夜爽 | 你懂的手机在线 | 国产精品你懂的 | 中文字幕一区在线观看视频 | 噜噜噜久久久 | 日本一区二区免费在线观看 | 好紧好爽水真多18 | 国产成人精品日本亚洲网站 | 色女人天堂| 天天操天天干天天射 | 亚洲精品一区二区中文 | 爱婷婷视频在线观看 | aa视频在线| 日本三级香港三级三级人!妇久 | 日本不卡视频一区二区 | 美国一级大黄香蕉片 | 亚洲色五月 | 天天操天天操天天操 | 色婷婷5月 | 很黄很黄的网站免费的 | 又黄又粗暴的120秒免费gif视频 | 成人在线一区二区 | 久久人人爽爽爽人久久久 | 狠狠色丁香婷婷综合视频 | 男子扒开美女尿口做羞羞的事 | 久热中文字幕在线精品免费 | 丁香六月综合网 |