与Node.js单线程执行模型真正混淆

时间:2012-08-23 10:25:51

标签: node.js

好的,我正在学习Node.js,但我无法围绕这个等待的模型。我正在通过阅读The Node Beginner Book来学习它。其中有一个关于阻塞和非阻塞操作的部分。我不明白的是非阻塞操作。

以下是代码:

var exec = require("child_process").exec;

function start(response) {
  console.log("Request handler 'start' was called.");

  exec("ls -lah", function (error, stdout, stderr) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write(stdout);
    response.end();
  });
}

function upload(response) {
  console.log("Request handler 'upload' was called.");
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello Upload");
  response.end();
}

exports.start = start;
exports.upload = upload;

启动函数名为exec,exec执行ls -lah。然后回调会等待响应吗?如果exec执行“find /”,在我的计算机中完成“find /”命令大约需要30秒。由于这是单线程,如果用户1访问启动功能,则在几毫秒内用户2也可以访问启动功能。然后会发生什么?是否意味着用户1将在30秒内收到响应,而用户2需要等待1分钟,因为用户1仍在执行“查找/”?

很抱歉,如果我的问题太苛刻了。谢谢你的阅读!

1 个答案:

答案 0 :(得分:4)

在node.js中,所有I / O操作都异步工作。两个find操作将并行运行。请尝试阅读:Understanding the node.js event loop