我有一種情況,工作線程解析一些數據並使用postMessage
將解析結果發送到主線程。然後工作線程繼續解析更多數據。所以我們可以說,工作線程就像一個循環,在每個循環之後,它會向主線程發送一些數據。工作線程發佈消息時,如果主線程忙,會發生什麼情況?
在主線程中,我在全局數組中查找了一下,以檢查接收到的數據是否已經存在。如果沒有,那麼我將數據插入到數組中。雖然我這樣做,工作線程繼續解析數據並將其發送到主線程。
查找可能相當昂貴和耗時。
現在我的問題是,它在每個瀏覽器崩潰。但是,如果我從主線程刪除查找,並將數據插入全局數組,它可以正常工作。所以我假設崩潰正在發生,因爲當第二個postMessage
被worker調用時,主線程保持忙碌狀態。
我的問題是兩倍 -
1)我的分析是否正確?我的意思是,當工作線程調用postMessage
時,如果主線程忙,是否有可能崩潰?
2)有什麼辦法可以克服這種情況嗎?
我實際上使用THREE.js,其中頂點數據來自服務器。很多頂點數據立即來自服務器。在我的工作線程中,我解析數據,當某些頂點產生「面」時,我將該面插入到我的主線程中的全局數組中。 我會嘗試在另一個工作線程中查看是否可以解決問題。 –