2013-03-21 46 views
0

我有一個普遍的問題,我無法解決網絡工作者的問題。我知道他們在另一個線程中進行後臺計算,因此他們從用戶所在的窗口中卸載了負載。線程如何幫助使用網絡工作者?

但是我很困惑這個'其他線程'是否意味着像運行不同的程序在計算機上,打開單獨的瀏覽器,或者它是否像在同一瀏覽器中的新選項卡。我覺得這更多的是後一種情況,但我不能100%確定,我找不到好的解釋。

,這都對我們可以利用網絡工作者做了限制意味着什麼?

在此先感謝!

+0

或者是它就像另一個選項卡中的谷歌瀏覽器開放,這基本上是一樣的新的瀏覽器,因爲每個標籤是一個不同的過程? – Markasoftware 2013-03-21 03:55:48

+0

Web工作人員是Web服務器上的進程。你已經提到客戶端程序是類比,他們不是。查看維基百科多線程。如果你想知道它是否值得/好...這是垃圾打扮成有用的東西,有很多額外的特殊節目和陷阱。 – chris 2013-03-21 04:01:59

+1

@chris Web Workers是客戶端。 – bfavaretto 2013-03-21 04:20:38

回答

3

webworker像一個獨立的執行線程一樣工作。多個線程可以在計算機進程中同時運行。如果有多個處理器,這些多個線程可以同時運行。如果只有一個處理器,那麼計算機上的操作系統會處理不同線程之間的時間切片,以便每個線程運行一段時間,然後下一個線程運行,並且對於偶然的觀察者來說,它們似乎在運行同時。

在瀏覽器中,一個webworker確實執行的線程,且獨立於瀏覽器窗口線程運行(其中有一個用於每個瀏覽器頁面是在瀏覽器中打開)。瀏覽器窗口線程有一些限制。主要的限制是它只處理用戶事件(鼠標移動,鼠標點擊,鍵盤事件等),當沒有JavaScript代碼也在主瀏覽器線程中運行時。因此,如果您要在主瀏覽器線程中運行一些長時間運行的JavaScript代碼,那麼瀏覽器將「出現」被鎖定,並且在該JavaScript運行時不會處理任何用戶事件。這通常被認爲是糟糕的用戶體驗。

但是,如果你在一個webworker運行該JavaScript,它可以去做到這一點的長期運行的東西,而不在主瀏覽器窗口螺紋阻擋事件的處理。當它完成其長時間運行的計算後,它可以向主瀏覽器窗口線程發送消息,並且可以處理結果(例如,顯示在頁面中或任何特定動作)。

有辦法打破你的工作成小塊和重複計時器執行工作的小塊工作,圍繞主瀏覽器線程的限制。但是,使用Web工作線程可以顯着簡化編程。

網絡工作者本身不能以任何方式訪問瀏覽器頁面。他們無法從中讀取數值或修改數據 - 他們無法運行動畫等等......這限制了它們對於更獨立於頁面的任務的有用性。經典的用法是一些長時間運行的計算(例如分析圖像中的數據,執行ajax調用,執行一些複雜的計算等)。 Web工作人員可以通過消息傳遞系統與主線程進行通信。這就像留下語音郵件。 webworker調用主線程併爲其留下消息。下一次主線程無事可做時,它會檢查是否有任何來自Web工作人員的消息,如果有,它會處理它們。通過這種方式,主線程和Web工作線程可以進行通信,但是在做其他事情時不能打斷其他線程。