NodeJS并行理解

时间:2012-02-11 22:11:45

标签: performance node.js asynchronous parallel-processing

考虑以下示例:(假设快递可用)

示例1:

app.get("/a", function(res){
    // Some-Blocking function for 10 seconds
    res.send("done");
});

app.get("/b", function(res){
    res.send("done");
});

在这个例子中,如果首先请求/ a,那么1秒后/ b;直到/ a完成后才处理/ b?如果它是一个线程,它应该是。那么消除这个问题的方法是什么?

示例2:

app.get("/a", function(res){
    // Some-Library-Database function
    db.find({"user.id" : 5}, function(data){
        res.send(data);
    });
});


app.get("/b", function(res){
    res.send("done");
});

同样,/ a被请求进入函数,调用db.find,所以当db.find完成时,回调执行A的res.send(数据)。所以,我们可以在不等待的情况下响应/ b请求,对吗? (如果我错了,请纠正我)

那么,我们如何实现例1中的例2呢?我们可以使阻塞功能也运行异步吗?或者DB正在执行IO(通过TCP向服务器等发送命令)使函数异步?我的意思是,在nodejs,s IO中唯一的异步是什么?如果需要大量计算,我们是否必须发出IO请求?

我正在尝试根据概念学习和构建。我已阅读NodeJS is cancer帖子,阅读关于Node的批评,不确定他是否只是在拖钓。

1 个答案:

答案 0 :(得分:1)

  1. 将“Some-Blocking function for 10秒”放入block.js
  2. 在主要代码('app.js')
  3. 的开头调用child_process.fork
  4. 在block.js中添加'message'事件处理程序,将阻塞代码放在那里
  5. 将孩子称为b.send(参数),阅读b.on('message', function(reply) {...}});
  6. 中的回复

    通过这种方式,您可以在阻止处理程序中按顺序处理所有内容,并且仍允许客户端不使用“阻止”代码在父“app.js”中处理

    编辑:更新的文档链接