您好,登錄后才能下訂單哦!
小編給大家分享一下JavaScript執行機制的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
進程與線程
我們都知道計算機的核心是CPU,它承擔了所有的計算任務;而操作系統是計算機的管理者,它負責任務的調度、資源的分配和管理,統領整個計算機硬件;應用程序則是具有某種功能的程序,程序是運行于操作系統之上的。
進程
進程是一個具有獨立功能的程序在一個數據集上的一次動態執行的過程,是操作系統進行資源分配和調度的一個獨立單位,是應用程序運行的載體 進程是能擁有資源和獨立運行的最小單位,也是程序執行的最小單位。
進程具有的特征:
動態性:進程是程序的一次執行過程,是臨時的,有生命期的,是動態產生,動態消亡的;
并發性:任何進程都可以同其他進程一起并發執行;
獨立性:進程是系統進行資源分配和調度的一個獨立單位;
結構性:進程由程序、數據和進程控制塊三部分組成。
線程
線程是程序執行中一個單一的順序控制流程,是程序執行流的最小單元,是處理器調度和分派的基本單位。一個進程可以有一個或多個線程,各個線程之間共享程序的內存空間(也就是所在進程的內存空間)。一個標準的線程由線程ID、當前指令指針(PC)、寄存器和堆棧組成。而進程由內存空間(代碼、數據、進程空間、打開的文件)和一個或多個線程組成。
進程與線程的區別
線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位;
一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線;
進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段、數據集、堆等)及一些進程級的資源(如打開文件和信號),進程與進程之間互不可見;
調度和切換:線程上下文切換比進程上下文切換要快得多。
JS為什么是單線程?
JavaScript從它誕生之初就是作為瀏覽器的腳本語言,主要用來處理用戶交互以及操作DOM,這就決定了它只能是單線程的,否則會帶來非常復雜的同步問題。
舉個例子: 如果JS是多線程的,其中一個線程要修改一個DOM元素,另外一個線程想要刪除這個DOM元素,這時候瀏覽器就不知道該聽誰的。所以為了避免復雜性,從一誕生,JavaScript就被設計成單線程。
為了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個線程,但是子線程完全受主線程控制,且不得操作DOM。所以,這個新標準并沒有改變JavaScript單線程的本質
瀏覽器原理
作為前端工程師,瀏覽器想必都不陌生,并且瀏覽器是多進程的。
瀏覽器組成部分
用戶界面:包括地址欄,前進/后退/刷新/書簽
瀏覽器引擎:在用戶界面和呈現引擎之間傳送指令
渲染引擎:用來繪制請求的內容
網絡:用來完成網絡調用,例如http請求,它具有平臺無關的接口,可以在不同平臺上工作
JavaScript解釋器:用來解析執行JavaScript代碼
用戶界面后端:用于繪制基本的窗口小部件,比如組合框和窗口,底層使用操作系統的用戶接口
數據存儲:屬于持久層,瀏覽器在硬盤中保存類似cookie的各種數據,HTML5定義了web database技術,這是一種輕量級完整的客戶端存儲技術
注意:與大多數瀏覽器不同的是,谷歌(Chrome)瀏覽器的每個標簽頁都分別對應一個呈現引擎實例。每個標簽頁都是一個獨立的進程
瀏覽器包含哪些進程
瀏覽器進程
瀏覽器的主進程(負責協調、主控),該進程只有一個
負責瀏覽器界面顯示,與用戶交互。如前進,后退等
負責各個頁面的管理,創建和銷毀其他進程
將渲染(Renderer)進程得到的內存中的Bitmap(位圖),繪制到用戶界面上
網絡資源的管理,下載等
第三方插件進程
負責管理第三方插件
GPU進程
負責3D繪制與硬件加速(最多一個)
渲染進程
負責頁面文檔解析,執行與渲染
渲染進程包含哪些線程
GUI渲染線程
主要負責解析HTML,CSS,構建DOM樹
以上是“JavaScript執行機制的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。