中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • web開發 > 
  • 什么是Javascript引擎和運行時以及單線程與非阻塞和異步以及并發語言分別是怎樣的

什么是Javascript引擎和運行時以及單線程與非阻塞和異步以及并發語言分別是怎樣的

發布時間:2021-09-30 11:13:41 來源:億速云 閱讀:110 作者:柒染 欄目:web開發

這篇文章將為大家詳細講解有關什么是Javascript引擎和運行時以及單線程與非阻塞和異步以及并發語言分別是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

恩,什么?我使用語言來完成工作。對于我和Javascript,此過程始于構建一個小型游戲,ajax請求和表單驗證。我們與Hapi  js的聯系越來越深。自從遇到React以來,我一直致力于。現在,要成為一個更好的程序員,您必須問為什么事情如何進行。Javascript運行時對我來說是最大的奧秘之一。

什么是Javascript引擎和運行時?

Javascript運行時是指在運行JavaScript代碼時在何處執行。就是說,可以在google  chrome上執行javascript,在這種情況下,您的javascript引擎是v8,如果在mozilla上-它是Spidermonkey,如果是IE-那么它的脈輪,如果是Safari-它是nitro,如果在節點上,則是v8。現在什么是JS引擎,什么是JS運行時?

引擎將我們編寫的JavaScript轉換為機器代碼。所有JavaScript引擎都實現ECMAScript提供的語言規范。標準化促進了獨立引擎的開發,并確保您的腳本無論在何處運行都可以得到相同的結果。為了獲得速度,V8將JavaScript代碼轉換為更有效的機器代碼,而不是使用解釋器。它通過像許多現代JavaScript引擎(例如SpiderMonkey或Rhino(Mozilla))一樣實現JIT(即時)編譯器,在執行時將JavaScript代碼編譯為機器代碼。這里的主要區別是V8不會產生字節碼或任何中間碼。JavaScript引擎只是更大概念的組成部分。該引擎在稱為Javascript  Runtime的環境中工作,該環境為我們的腳本提供了附加功能。這些功能可能包括撥打網絡電話,捕獲鼠標/鍵盤事件等。

這是JS Runtime的體系結構。V8沒有這些WebAPI。這些由運行時給出。在chrome瀏覽器JS運行時中,瀏覽器擁有它,而在Node中則由C  ++庫提供。

什么是Javascript引擎和運行時以及單線程與非阻塞和異步以及并發語言分別是怎樣的

> Runtime Architecture

讓我們看看Javascript是如何異步和單線程的。

單線程,什么?

Javascript代碼在單線程中執行,但是Javascript運行時不在單線程中運行。線程池存在于JS運行時中,但是我們不必擔心它,因為運行時會處理它。但是,那是怎么做的呢?事件循環可以挽救。

讓我們了解什么是運行時(或屬于運行時的JS引擎)中的堆和調用堆棧。javascript代碼首先轉換為機器代碼。堆存儲所有變量,并由調用堆棧執行操作。

console.log("Start")  function sayHello(name) {    console.log(`Hello ${name}!`) }  sayHello("Abhinav"); console.log("End")

所有這些都轉到調用堆棧并在那里執行。

  • Start

  • Hello Abhinav

  • End

我們可以將腳本分為兩種類型,即立即調用和稍后調用。

異步任務到來時會發生什么?任務需要時間才能運行。比如說進行API調用或計時器等。有一個稱為回調的概念。這是完成此任務后要執行的功能。

好吧,它們作為任何常規函數進入調用堆棧,但是由于此任務駐留在WebAPI中,因此我們對WebAPI進行了調用。它存儲任務的回調函數并為我們完成任務(根據運行時使用線程/多處理)。任務完成后,它將回調發送到回調隊列。

在這里再次可視化。

什么是Javascript引擎和運行時以及單線程與非阻塞和異步以及并發語言分別是怎樣的

現在什么是事件循環?事件循環連續運行(在瀏覽器運行時中,它并不總是在節點中運行)以檢查調用棧是否為空,如果調用棧為空,它將從回調隊列中提取第一項并將其移至調用棧并執行回調函數。在堆棧不為空之前,不會從回調隊列添加任何功能。

回調總是完全執行的。事件循環一次運行一個回調。沒有上下文切換。隊列中的所有回調都必須等到當前的回調完成。如果腳本運行時間過長,則會阻止其他腳本。這就是為什么回調應該相對簡短而簡單。

很簡單吧!但實際上,它要復雜得多。有多個隊列,具體取決于運行時,并且它們的優先級不同。有一些東西作為渲染隊列。誰的工作是渲染屏幕。

非阻塞狀態如何?

假設您在調用API時失敗,或者發生了其他事件,該事件仍然存在于Web  api中,因此它永遠不會進入回調隊列,因此不會進入調用堆棧。因此,沒有任何東西被阻止。

它是并發的嗎?

并行和并行有什么區別?并行是您同時執行2個任務的位置。(邊吃爆米花邊看電影)。這是通過多核來實現的。JS代碼在調用堆棧中并行執行,而不是并行執行。但是WebAPI可以利用多核并并行運行。

關于什么是Javascript引擎和運行時以及單線程與非阻塞和異步以及并發語言分別是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梓潼县| 延安市| 平定县| 高州市| 观塘区| 吉木萨尔县| 龙江县| 利辛县| 台东市| 龙胜| 上思县| 凌源市| 六枝特区| 舞钢市| 合江县| 稷山县| 高安市| 雷山县| 湘西| 左权县| 郑州市| 彭山县| 镇坪县| 沧源| 夏河县| 图木舒克市| 阿尔山市| 双江| 封丘县| 温州市| 兴和县| 承德县| 区。| 师宗县| 东方市| 南郑县| 陇川县| 抚远县| 云南省| 喀喇沁旗| 杭州市|