瀏覽器的線程和進程

參考文章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引擎空閒了執行
相關文章
相關標籤/搜索