2016-12-18 56 views
2

我瞭解現代瀏覽器的JS engnines(如V8,SpiderMonkey的,脈輪,等)在內部使用線程池,即使只有一個線程(運行事件循環)暴露於一個JS程序員。爲什麼現代瀏覽器JS引擎是多線程的?

顯然,(很少使用)的Web工人需要多線程(或多個進程) - 否則他們無法利用多個CPU內核。我的問題是,來自Web Workers的之外,實現具有多個線程的JS引擎有什麼好處?

爲什麼不能JS引擎始終保持單線程通過內部依靠相同的事件循環的JS程序員使用,使用非阻塞OS調用時,它需要做任何IO?

澄清:JS引擎使用即使用戶打開只有一個標籤只是一個窗口一個線程池。

編輯:這是回答here

+1

瀏覽器是在同一時間觀看多個網頁? –

+0

@EdHeal我編輯了我的問題來澄清。 – max

+3

@max即使只有一個選項卡,瀏覽器UI也可能在另一個進程中使用JS。 – Oriol

回答

1

有跡象表明,從並行化中獲益,因爲他們可以在腳本的不同部分或相對於彼此同時運行一個腳本引擎的許多地方:

  • 解析
  • 編譯
  • JIT,優化
  • 調試/日誌/剖析
  • 垃圾收集
  • 圖形

而且這還不包括髮動機不同的使用環境下的多個實例(工人腳本,瀏覽上下文)之間共享。

+0

IO是完全單線程的,還是它也受益於多線程? – max

+0

這很大程度上取決於IO的特定類型,並不一定對應於js引擎本身的好處。網絡通常使用非阻塞OS調用完成,而並行文件IO通常需要線程。然後與瀏覽器的其他組件(如DOM或渲染管道)進行通信,這些也是在多線程設計中實現的。 – Bergi

相關問題