瀏覽器的線程和進程
參考文章javascript
瀏覽器進程和線程java
瀏覽器多進程與js線程web
瀏覽器內核是多線程,在內核控制下各線程相互配合以保持同步,一個瀏覽器一般由如下常駐線程組成:
GUI 渲染線程
- 負責渲染瀏覽器界面,包括解析HTML、CSS、構建DOM樹、Render樹、佈局與繪製等
- 當界面須要重繪(Repaint)或因爲某種操做引起迴流(reflow)時,該線程就會執行
- GUI渲染線程與JS引擎線程互斥
JavaScript引擎線程
- JS內核,也稱JS引擎,負責處理執行javascript腳本
- 等待任務隊列的任務的到來,而後加以處理,瀏覽器不管何時都只有一個JS引擎在運行JS程序
定時觸發器線程
- setInterval與setTimeout所在線程
- 當計時完成被觸發,事件會被添加到事件隊列,等待JS引擎空閒了執行
- 注意:W3C的HTML標準中規定,setTimeout中低於4ms的時間間隔算爲4ms
事件觸發線程
- 聽起來像JS的執行,可是其實歸屬於瀏覽器,而不是JS引擎,用來控制時間循環
- 當JS引擎執行代碼塊如setTimeout時(也可來自瀏覽器內核的其餘線程,如鼠標點擊、AJAX異步請求等),會將對應任務添加到事件線程中
異步http請求線程
- 線程若是檢測到請求的狀態變動,若是設置有回調函數,該線程會把回調函數添加到事件隊列,同理,等待JS引擎空閒了執行
歡迎關注本站公眾號,獲取更多信息