【问题标题】:Is my understanding of 'Non-blocking' in Node correct?我对 Node 中“非阻塞”的理解是否正确?
【发布时间】:2012-02-08 22:59:11
【问题描述】:

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

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

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

console.log("b");

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

当我调用 beAsync 和像 fs.readFile 这样的真正异步函数时,最初必须有一些同步运行的代码,然后发生一些事情,允许 readFile 之后的代码其余代码是allowed 允许运行。

我所说的代表回调进入比 JavaScript 更低级别的循环是否正确?

因此对 beAsync 的修订将包含一个 setTimeout。

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

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

【问题讨论】:

    标签: node.js asynchronous callback nonblocking


    【解决方案1】:

    对这个下层说话是实现无阻塞的唯一途径 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 其余代码之后 被允许被允许运行。

    这不是很详细,但从高层次上来说是正确的。每当您触发一些异步工作并给该方法一个回调时,就会完成工作以使用工作结果执行您的回调。

    【讨论】:

    • 好的,我想我明白了。在您分享的链接中,这个回答帮助我澄清了一些事情quora.com/…(作者 Andrew Jessup)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多