Javascript Node.js中CPU密集型代码的混淆

Javascript Node.js中CPU密集型代码的混淆,javascript,events,node.js,serverside-javascript,Javascript,Events,Node.js,Serverside Javascript,一个关于Node.js新手提出的“除了代码之外,所有东西都并行运行”的问题。这显然是一个人工示例,但假设我想创建一个包含函数factorize()的数学库,其行为如下: var http = require('http'); http.createServer(function (req, res) { myMath.factorize(some_big_number,function(factors) { res.writeHead(200, {'Content-Type': 'a

一个关于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);
如何将其编写为“并行运行”

我一直以中的解析代码为例,这可能需要一些处理时间。代码的主体被认为是“您的代码”,还是“并行运行”

如果不是:在编写
factorize()
时,我需要做些什么,这样它也可以是非阻塞的/行为类似于客户端?使用EventEmitter是否足够

如果是:我的最佳选择是否仍如中所建议的那样使用

对于任何不清晰之处,请提前表示歉意。

实际上,您无法“并行”运行它(除非您使用a),因为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);
        });
    }
}

你所有的JS代码不能并行运行。永远不会同时执行多个函数。 CPU密集型代码将使您的程序在该代码结束之前无法执行其他操作


我建议您使用setTimeout拆分代码,或者在单独的进程中完成工作。但这一定是非常密集的代码;)

要编写非阻塞代码,必须进行消息传递

要进行消息传递,您必须打开一个流并通过它传递消息。这涉及到与其他流程或子流程对话


您可以在节点中创建子进程来完成繁重的工作,也可以创建tcp/web服务来完成繁重的工作。只要让node将消息传递给他们,然后在外部进程完成繁重工作后将数据发送到您的响应中即可。

我没有答案,但我理解这个问题,所以我想这对大多数人来说已经足够清楚了。:)他说的是服务器和响应请求,所以它是并行运行的。我还建议在递归函数或循环中使用
process.nextTick
,这样可以有很多小的中断。