关于Node.js中CPU密集型代码的困惑

YXD*_*YXD 14 javascript events serverside-javascript node.js

关于"除了代码之外的所有内容并行运行"的问题,来自Node.js的新人.这是一个明显人为的例子,但是我想说我想创建一个包含函数的数学库,factorize()其行为如下:

var http = require('http');
http.createServer(function (req, res) {
  myMath.factorize(some_big_number,function(factors) {
    res.writeHead(200, {'Content-Type': 'application/json'});
    res.end(JSON.stringify(factors));
  }
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)

如何编写它以便"并行运行"?

我一直在查看这个库中的解析代码作为一个可能需要一些处理时间的例子.代码的主体被认为是"你的代码",还是"并行运行"?

如果不是:在编写时我需要做什么,factorize()以便它也是非阻塞/表现得像客户端?使用EventEmitter是否足够?

如果是这样的话:我仍然最好选择使用此问题中建议的子进程吗?

如果不清楚,请提前道歉.

And*_*ris 7

实际上你不能"并行"(除非你使用工人模块)运行它作为node.js中的JavaScript在单线程中执行,但你可以将你的单个线程分成更小的部分.例如process.nextTick,当CPU以较小的块而不是一个长时间运行的代码执行代码时,它也会有小的中断来运行其他东西.

myLongRunningCode(callback){
    do_a_piece_of_the_work();
    if(ready){
        callback();
    }else{
        // give the CPU a small break to do other things
        process.nextTick(function(){
            // continue working
            myLongRunningCode(callback);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)