2017-10-21 58 views
0

我在尝试对1000万个值的数组进行排序。从发现新技术Microsoft - Napa.js允许使用多线程与Node.js.Node.js与Napajs并行执行任务

在那里,我们使用下面的代码:

const napa = require('napajs') 
const zone = napa.zone.create('zone', { workers: 4 }); 
zone.execute((...args) => { 
    // here I can take anything I want to execute in a native thread 
    // but it is also possible to implement shared memory for all 
    // threads, but I can't find out how 
}, [args]) 

帮助我明白了,什么分配。什么是处理程序以及如何使用TransferContext如果它需要执行此任务。

Ant至少如何使用所有这些知识为我的线程创建共享内存?

回答

1

更新:

Napa.js(> = 0.2.0)现在支持传输内置类型的JavaScript如SharedArrayBuffer而不进行复制。对于特定的问题,您可以找到示例Parallel Quick Sort


这是一个有趣的问题。目前,在Napa.js中默认序列化/反序列化在工作人员之间传递的参数。我们可能希望更好地解决跨工作者共享阵列而不复制的问题。

我看到的可行性如下:

  1. 假设我们使用INT32阵列中的主要JS 线程持有10M值。
  2. 创建一个插件,通过 v8 :: Int32Array :: Buffer():: Externalize()获取数组的原始指针。 (这让用户管理 的内存,我们可能需要一些生命周期管理)
  3. 将原始指针传递给另一个工人。
  4. 工作者从原始指针(通过外部化ArrayBuffer)创建v8 :: Int32Array 。

这种模式非常常见,我认为将它包含在Napa.js中可能是一个好主意。我已经提出了一项功能请求Introduce Buffer class that can be transferred across workers without copying

BTW,TransportContext用于从一个工人转移std::shared_ptr另一工作人员,在这种情况下,我认为这更多的是我们如何在工共享阵列。

+0

谢谢你的回答!像你的[路线图](https://github.com/Microsoft/napajs/wiki/roadmap)。期待这些事情都完成了 –