2015-11-18 69 views
5

我一直認爲網絡工作者創建單獨的線程,但今天我遇到了w3c網站上的規範。下面是關於網絡工作者的一個引用:網絡工作者 - 他們是否創建實際的線程?

這允許與消息傳遞一樣的線程操作,如 協調機制。

的問題是 - 如果它是線狀,而不是實際的線程爲什麼要使用這種技術的優勢(性能明智)?

任何幫助將不勝感激!

+0

接受的答案是誤導性的。看到我的答案。 – slebetman

回答

2

是的,網絡工作者創建實際的線程(或過程,規範是靈活的)。根據Web Workers說明書中,當工人在創建第一個步驟是:

  1. 創建一個單獨的並行執行環境(即,一個單獨的線程或過程或等效構建體),並運行這些步驟的其餘在這方面。

    爲了計時API的目的,這是工人創建的正式時刻。

(W3C的Web工人規範第4.4節)

所以它是明確規定在網絡工作者運行的代碼運行的實際線程或進程。

雖然可以實現工人無緒(注意是「等價結構」的語言),用於在不支持線程的系統,所有的瀏覽器實現實現Web工作者爲主題。

1

根據MDN

Web Workers是通過其可以由一個腳本操作,以在一個後臺線程從Web應用程序的主執行線程單獨運行的機構。這樣做的好處是可以在單獨的線程中執行費力的處理,從而允許主(通常是UI)線程運行而不會被阻止/減慢。

因此,每個worker不會創建一個單獨的線程,但所有worker都在一個單獨的線程中運行。

我想,就像其他事情一樣,實現和方法可能因瀏覽器而異。

+0

那麼,網絡工作者是否會創建實際的線程? – andrey

+1

@andrey看起來他們沒有。 –

+1

我認爲這個答案只是MDN內容的一種可能的解釋。不清楚從主執行線程分離出的後臺線程*是指每個「工作」實例的線程,或者是每個瀏覽器進程的線程。然而,兩種解釋都是可能的。 –

1

網絡工作人員在與主線程隔離的單個線程中運行,他們傳遞消息的方式爲線程,工作方式根據您是否使用專用(只能從腳本訪問創建它)或共享(可以通過端口對象在同一個域內的任何腳本訪問)worker。

編輯: 已更新的答案反映了我幾個月前的評論。雖然單個web worker在一個獨立的線程中運行,但並不意味着每個額外的worker都將運行在同一個線程中。

+0

謝謝!這個「單獨的線程」專門針對網絡工作者嗎?獨立於UI線程? – andrey

+0

@Dontfeedthecode沒有單個孤立的線程意味着有一個線程爲所有的工人? –

+0

@Dontfeedthecode因此使用多名工人沒有好處。 –