2016-05-06 16 views
1

我有典型的代码的node.js开始webworker何时开始在节点webworker快速上升内存D b。 对于小型的data这个工作非常好,但是当数据稍微变大时,工人开始挣扎。与“大”数据

实际的data我想处理的是一个csv,我用BabyParse解析得到一个具有149000个属性的对象,其中每个属性都有另外17个属性。 (149000行×17列= 2533000个属性)。该文件是17MB。

当做这个节点将分配大量的内存,并最终崩溃大约53%的内存分配。机器有4GB。

工人看起来大致是这样的:

self.onmessage = function (event) { 
    process(event.data.data); 
}; 

function process(data) { 
    for (var i = 0; i < data.length; i++) { 
     self.postMessage({ 
      'properties' : data[i] 
     }); 
    } 
} 

我试图大块它逐块也工作好工人中的数据和过程。但是我想生成一个图并处理需要完整数据的边,因为我需要检查每一行(顶点)与其他所有数据。

有没有办法将数据流到工作人员?或者有没有人有一个想法,为什么节点分配这么多的内存与17MB的数据被发送?

回答

1

除了解析主线程中的数据外,您还可以将文件名作为消息传递给worker并让worker从磁盘加载。否则,你将在内存中存储所有数据两次,一次在主机中,一次在工作中。

另一种选择是将csv npm包与流解析器一起使用。 postMessage他们进来并缓冲起来,直到工人的最终结果。

为什么你的解决方案试图分配我不知道的大量内存。我知道postMessage是为了传递小信息。

+0

谢谢,我不知道文件系统在网络工作者中可用。 – Wipster