我对Node中“非阻塞”的理解是否正确?

时间:2012-01-12 16:41:12

标签: node.js asynchronous callback nonblocking

人们有时会将下面的回调模式称为异步。

function beAsync(msg, cb){
  cb(msg);
}

beAsync("a", function(msg){
  console.log(msg);
});

console.log("b");

人们有时会说beAsync允许其余的代码运行,然后回调就会在它准备就绪时发生。

当我调用beAsync和真正的异步函数(如fs.readFile)时,必须有一些同步运行的代码和然后发生的事情允许{{1}之后的代码允许其余代码运行。

我是否正确地说某个代表回调的内容会进入比JavaScript更低级别的循环?

因此beAsync的修订版将包含setTimeout。

readFile

所以setTimeout和readFile的内部可以说出JavaScript所在的层吗? 说到这个较低层是在JavaScript中实现非阻塞代码的唯一方法吗?

1 个答案:

答案 0 :(得分:0)

  

说到这个较低层是实现非阻塞的唯一方法   JavaScript中的代码?

这是正确的。节点只是等式的一部分。框架本身大量使用线程来管理可以阻塞的东西,比如IO。看看

http://www.quora.com/How-does-IO-concurrency-work-in-node-js-despite-the-whole-app-running-in-a-single-thread

  

当我调用beAsync和真正的异步函数时,如fs.readFile   最初必须有一些同步运行的代码然后   发生了一些事情,允许代码在readFile之后的代码   被允许被允许运行。

这不是很详细,但从高层来看是正确的。每当你启动一些异步工作,并给该方法一个回调时,就会有工作来执行你的回调和工作的结果。