节点中STDIO包装器的替代方案

时间:2019-04-20 02:32:53

标签: node.js multithreading asynchronous process

我有一个使用2个类的脚本,例如类A和类B。类A包含一系列类B实例,通常不少于20。类B执行计算量大且速度慢的任务,使父进程成为瓶颈。 async函数可能是这里的答案,但是它仍然仅在当前进程内运行,使用其余进程可能需要的内存(总共20个)使用。在对节点中的多线程进行了一些研究之后,我遇到了使用多进程方法的想法,每个Class B实例将具有自己的内存,并且与父进程完全分开,问题在于父母和孩子。显然,有STDIO,但是在Node中使用STDIO会使用流,这意味着诸如

ClassAInstance.ClassBArray[0].getItem

将返回不确定的,因为getItem不是流的属性。

代理可能是解决方案。

const B = new Proxy(class B {
    // some class that defines functions performing expensive tasks
}, {
    get(target, prop) {
        return new Promise(resolve => {
            target.stream.write(`get ${prop}`);
            target.stream.on('message', resolve(message));
        });
    }
});

除了引用任何属性将返回promise,更改原始脚本的整个结构之外,这将起作用。

完全有可能更改脚本的体系结构以适应此更改,但是似乎令人费解的事情很多,因为产生太多子进程可能会大大降低用户计算机的速度。如果有人可以建议可行的解决方法或完全不同的方法,那将不胜感激。

0 个答案:

没有答案