javascript web worker多线程字符串搜索比单线程慢?

时间:2017-08-17 06:56:50

标签: javascript multithreading performance web-worker

我有一个模糊搜索功能。我有一个52k字的列表。我正在针对每个单词运行该功能。完成大约需要30ms。

我尝试通过使用myWorker.postMessage({targets:slice, search})向每个工作人员(我的cpu上有8个线程)发送1/8的列表,将其拆分为8个Web工作线程。但这要慢得多,大约100毫秒。

我的问题是:多线程是否有可能在这里更快?或者只是太多的数据要复制到30ms以下的线程完成?有可能不复制内存并拥有某种共享内存吗?

(似乎只是简单地向工作人员发送数据比我实际搜索1个线程中的所有数据要慢!)

1 个答案:

答案 0 :(得分:2)

  

是否可以不复制内存并进行某种共享   存储器?

您可以使用MyClass::MyClass(std::string path) : my_variable_name( [&]() -> some_namespace::some_class_name { // do work here and return desired value string other = "jwrhkfg"; if (path="site.com") { other = "oritrot"; } else { other = "hsghkr"; } return some_namespace::some_class_name(path+other); }() /*call lambda immediately*/ ) {} 的第二个参数transfer创建的对象从Worker.postMessage()线程到主线程,或者从主线程到工作线。

Worker

// transfer data to `Worker` instance
worker.postMessage(data.buffer, [data.buffer]) // where `data` is an `ArrayBuffer`
  

<强> Passing data by transferring ownership (transferable objects)

     

Google Chrome 17+和Firefox 18+包含另一种传递方式   某些类型的对象(可转移对象,即对象   向工作人员或从工作人员实施Transferable接口)   高性能。可转移对象从一个转移   具有零拷贝操作的另一个上下文,这导致了巨大的   发送大型数据集时性能提升。