我有一个使用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,更改原始脚本的整个结构之外,这将起作用。
完全有可能更改脚本的体系结构以适应此更改,但是似乎令人费解的事情很多,因为产生太多子进程可能会大大降低用户计算机的速度。如果有人可以建议可行的解决方法或完全不同的方法,那将不胜感激。