在具有集群的单独线程中运行节点js CPU重代码?

时间:2017-04-27 16:08:04

标签: javascript node.js multithreading cluster-computing

我有一个带有功能的类,结果证明是CPU密集型的,我正在尝试确定将其分离到另一个线程的最佳方法。我使用下面的代码来测试这个,但我不确定这是否是实现这一目标的最佳方法。最后,我希望有一个具有CPU重功能的类,并且能够选择在单独的线程上运行它。

我的工作代码:

var cluster = require('cluster')

if (!cluster.isMaster) { // cpuHog is only called inside the child process    
    console.log(`Worker is listening on pid:${process.pid}`);
    process.on('message', (input) => {
        console.log(`Request receved for input ${input}`)
        cpuHog(input).then(output => process.send(output))
    })
    return; // exit if child
}

function cpuHog(input){
    return new Promise( (resolve)=> { setTimeout(()=> {resolve(input*input)},2000) }) 
}

function createSeparateThread(input){
    return new Promise((resolve,reject) => {
        var worker = cluster.fork()
        worker.on('message', resolve);
        worker.send(input)
    })
}

var input = 5
createSeparateThread(input).then( output => console.log(`Received result is ${output}`))
// My normal async node js code...

因此,如果上面的代码没问题,我该如何将其转换为Class实例?

var myClass = new MyClass()
// this should start a new thread
myClass.createSeparateThread(5)

0 个答案:

没有答案