我有一个模糊搜索功能。我有52k个单词的列表。我在对每个单词运行这个函数。大约需要30米的时间才能完成。
我尝试通过使用myWorker.postMessage({targets:slice, search})将列表的1/8发送给每个工作人员(我的cpu上有8个线程),将其分成8个worker线程。但这要慢得多,大约100毫秒。
我的问题是:是否有可能使多线程在这里变得更快?或者仅仅是太多的数据拷贝到不到30 is的线程中就可以完成?是否有可能不复制内存并拥有某种共享内存?
(仅仅将数据发送给工作人员似乎比我在一个线程中搜索所有数据的速度要慢!)
发布于 2017-08-17 07:24:10
是否有可能不复制内存并拥有某种共享内存?
您可以使用Worker.postMessage()的第二个参数从Worker线程到主线程,或者从主线程到工作线程,对创建的对象进行转移。
// transfer data to `Worker` instance
worker.postMessage(data.buffer, [data.buffer]) // where `data` is an `ArrayBuffer`
// transfer data from `Worker` instance
self.postMessage(data.buffer, [data.buffer]) // where `data` is an `ArrayBuffer` 通过转让所有权传递数据(可转让的对象) Google 17+和火狐18+包含了一种将特定类型的对象(可传输对象,即实现可转让接口的对象)传递给或从高性能工作者那里传递的额外方法。可传输对象通过零拷贝操作从一个上下文传输到另一个上下文,这在发送大数据集时带来了巨大的性能改进。
https://stackoverflow.com/questions/45728454
复制相似问题