溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

JavaScript執(zhí)行機(jī)制的示例分析

發(fā)布時(shí)間:2022-01-14 17:42:03 來(lái)源:億速云 閱讀:125 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下JavaScript執(zhí)行機(jī)制的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

進(jìn)程與線(xiàn)程

我們都知道計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù);而操作系統(tǒng)是計(jì)算機(jī)的管理者,它負(fù)責(zé)任務(wù)的調(diào)度、資源的分配和管理,統(tǒng)領(lǐng)整個(gè)計(jì)算機(jī)硬件;應(yīng)用程序則是具有某種功能的程序,程序是運(yùn)行于操作系統(tǒng)之上的。

進(jìn)程

進(jìn)程是一個(gè)具有獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行的過(guò)程,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,是應(yīng)用程序運(yùn)行的載體 進(jìn)程是能擁有資源和獨(dú)立運(yùn)行的最小單位,也是程序執(zhí)行的最小單位。

進(jìn)程具有的特征:

  • 動(dòng)態(tài)性:進(jìn)程是程序的一次執(zhí)行過(guò)程,是臨時(shí)的,有生命期的,是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的;

  • 并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行;

  • 獨(dú)立性:進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位;

  • 結(jié)構(gòu)性:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成。

線(xiàn)程

線(xiàn)程是程序執(zhí)行中一個(gè)單一的順序控制流程,是程序執(zhí)行流的最小單元,是處理器調(diào)度和分派的基本單位。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線(xiàn)程,各個(gè)線(xiàn)程之間共享程序的內(nèi)存空間(也就是所在進(jìn)程的內(nèi)存空間)。一個(gè)標(biāo)準(zhǔn)的線(xiàn)程由線(xiàn)程ID、當(dāng)前指令指針(PC)、寄存器和堆棧組成。而進(jìn)程由內(nèi)存空間(代碼、數(shù)據(jù)、進(jìn)程空間、打開(kāi)的文件)和一個(gè)或多個(gè)線(xiàn)程組成。

進(jìn)程與線(xiàn)程的區(qū)別

  • 線(xiàn)程是程序執(zhí)行的最小單位,而進(jìn)程是操作系統(tǒng)分配資源的最小單位;

  • 一個(gè)進(jìn)程由一個(gè)或多個(gè)線(xiàn)程組成,線(xiàn)程是一個(gè)進(jìn)程中代碼的不同執(zhí)行路線(xiàn);

  • 進(jìn)程之間相互獨(dú)立,但同一進(jìn)程下的各個(gè)線(xiàn)程之間共享程序的內(nèi)存空間(包括代碼段、數(shù)據(jù)集、堆等)及一些進(jìn)程級(jí)的資源(如打開(kāi)文件和信號(hào)),進(jìn)程與進(jìn)程之間互不可見(jiàn);

  • 調(diào)度和切換:線(xiàn)程上下文切換比進(jìn)程上下文切換要快得多。

JS為什么是單線(xiàn)程?

JavaScript從它誕生之初就是作為瀏覽器的腳本語(yǔ)言,主要用來(lái)處理用戶(hù)交互以及操作DOM,這就決定了它只能是單線(xiàn)程的,否則會(huì)帶來(lái)非常復(fù)雜的同步問(wèn)題。

舉個(gè)例子: 如果JS是多線(xiàn)程的,其中一個(gè)線(xiàn)程要修改一個(gè)DOM元素,另外一個(gè)線(xiàn)程想要?jiǎng)h除這個(gè)DOM元素,這時(shí)候?yàn)g覽器就不知道該聽(tīng)誰(shuí)的。所以為了避免復(fù)雜性,從一誕生,JavaScript就被設(shè)計(jì)成單線(xiàn)程。

為了利用多核CPU的計(jì)算能力,HTML5提出Web Worker標(biāo)準(zhǔn),允許JavaScript腳本創(chuàng)建多個(gè)線(xiàn)程,但是子線(xiàn)程完全受主線(xiàn)程控制,且不得操作DOM。所以,這個(gè)新標(biāo)準(zhǔn)并沒(méi)有改變JavaScript單線(xiàn)程的本質(zhì)

瀏覽器原理

作為前端工程師,瀏覽器想必都不陌生,并且瀏覽器是多進(jìn)程的。

瀏覽器組成部分

  • 用戶(hù)界面:包括地址欄,前進(jìn)/后退/刷新/書(shū)簽

  • 瀏覽器引擎:在用戶(hù)界面和呈現(xiàn)引擎之間傳送指令

  • 渲染引擎:用來(lái)繪制請(qǐng)求的內(nèi)容

  • 網(wǎng)絡(luò):用來(lái)完成網(wǎng)絡(luò)調(diào)用,例如http請(qǐng)求,它具有平臺(tái)無(wú)關(guān)的接口,可以在不同平臺(tái)上工作

  • JavaScript解釋器:用來(lái)解析執(zhí)行JavaScript代碼

  • 用戶(hù)界面后端:用于繪制基本的窗口小部件,比如組合框和窗口,底層使用操作系統(tǒng)的用戶(hù)接口

  • 數(shù)據(jù)存儲(chǔ):屬于持久層,瀏覽器在硬盤(pán)中保存類(lèi)似cookie的各種數(shù)據(jù),HTML5定義了web database技術(shù),這是一種輕量級(jí)完整的客戶(hù)端存儲(chǔ)技術(shù)

注意:與大多數(shù)瀏覽器不同的是,谷歌(Chrome)瀏覽器的每個(gè)標(biāo)簽頁(yè)都分別對(duì)應(yīng)一個(gè)呈現(xiàn)引擎實(shí)例。每個(gè)標(biāo)簽頁(yè)都是一個(gè)獨(dú)立的進(jìn)程

瀏覽器包含哪些進(jìn)程

瀏覽器進(jìn)程

  • 瀏覽器的主進(jìn)程(負(fù)責(zé)協(xié)調(diào)、主控),該進(jìn)程只有一個(gè)

  • 負(fù)責(zé)瀏覽器界面顯示,與用戶(hù)交互。如前進(jìn),后退等

  • 負(fù)責(zé)各個(gè)頁(yè)面的管理,創(chuàng)建和銷(xiāo)毀其他進(jìn)程

  • 將渲染(Renderer)進(jìn)程得到的內(nèi)存中的Bitmap(位圖),繪制到用戶(hù)界面上

  • 網(wǎng)絡(luò)資源的管理,下載等

第三方插件進(jìn)程

負(fù)責(zé)管理第三方插件

GPU進(jìn)程

負(fù)責(zé)3D繪制與硬件加速(最多一個(gè))

渲染進(jìn)程

負(fù)責(zé)頁(yè)面文檔解析,執(zhí)行與渲染

渲染進(jìn)程包含哪些線(xiàn)程

GUI渲染線(xiàn)程

主要負(fù)責(zé)解析HTML,CSS,構(gòu)建DOM樹(shù)

以上是“JavaScript執(zhí)行機(jī)制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI