2012-01-12 55 views
2

人们有时会将下面的回调模式称为异步。我对节点中'非阻塞'的理解是否正确?

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

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

console.log("b"); 

人们有时说的是,beAsync允许代码的其余部分再运行回调发生时,它的准备。

当我打电话beAsync和真正喜欢fs.readFile首先必须是运行同步和然后有事允许代码readFile其余部分被允许允许运行后代码中的一些代码的异步功能。

我在说一些代表回调的东西进入一个比JavaScript更低级别的循环时正确吗?

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

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

所以setTimeout和readFile的内部可以说是一个JavaScript所在的图层? 对此底层说话是实现JavaScript中的非阻塞代码的唯一方法?

回答

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其余代码允许运行允许 。

这不是很详细,但它从高水平正确。每当你开始一些异步工作,并给这个方法一个回调函数时,就会有工作完成你的回调和工作结果。

+0

好吧,我想我已经明白了。在你分享的链接中,这个答案帮助我澄清了一些对我来说http://www.quora.com/How-does-IO-concurrency-work-in-node-js-despite-the-whole-app-running -in-a-single-thread #__ w2_AYBuMR9_answer_user(by Andrew Jessup) – Aaron 2012-01-12 17:13:14