我有一种情况,工作线程解析一些数据并使用postMessage
将解析结果发送到主线程。然后工作线程继续解析更多数据。所以我们可以说,工作线程就像一个循环,在每个循环之后,它会向主线程发送一些数据。工作线程发布消息时,如果主线程忙,会发生什么情况?
在主线程中,我在全局数组中查找了一下,以检查接收到的数据是否已经存在。如果没有,那么我将数据插入到数组中。虽然我这样做,工作线程继续解析数据并将其发送到主线程。
查找可能相当昂贵和耗时。
现在我的问题是,它在每个浏览器崩溃。但是,如果我从主线程删除查找,并将数据插入全局数组,它可以正常工作。所以我假设崩溃正在发生,因为当第二个postMessage
被worker调用时,主线程保持忙碌状态。
我的问题是两倍 -
1)我的分析是否正确?我的意思是,当工作线程调用postMessage
时,如果主线程忙,是否有可能崩溃?
2)有什么办法可以克服这种情况吗?
我实际上使用THREE.js,其中顶点数据来自服务器。很多顶点数据立即来自服务器。在我的工作线程中,我解析数据,当某些顶点产生“面”时,我将该面插入到我的主线程中的全局数组中。 我会尝试在另一个工作线程中查看是否可以解决问题。 –