【问题标题】:Does nodejs create background task or child process to execute callback functionnodejs是否创建后台任务或子进程来执行回调函数
【发布时间】:2015-07-09 03:05:42
【问题描述】:

NodeJS 是否创建后台任务或子进程来执行回调函数? NodeJS如何执行下面的查询?

MyModel.find({}, function (err, docs) {
  //Do some thing
});

【问题讨论】:

    标签: node.js asynchronous callback background-process child-process


    【解决方案1】:

    这个问题已经回答了很多次了……它不是 Mongoose 特有的,几乎每个 Javascript 库都这样做来处理异步调用。

    看看 Philip Roberts 的 JSConf 演示文稿:https://www.youtube.com/watch?v=8aGhZQkoFbQ

    它很好地解释了幕后实际发生的事情。

    无论如何,Mongoose 基本上所做的是使用 Node.js MongoDB Native driver 查询 MongoDB,等待响应并使用从本机驱动程序收到的 errdoc 结果执行您的回调函数。

    简单来说,Mongoose 只是原生驱动程序的一个包装器,让开发人员的工作更轻松。

    【讨论】:

      【解决方案2】:

      NodeJs 实现非阻塞i/o 以在单线程中实现这些回调。它使用事件循环。

      nodejs 根据数据需求注册一个回调并将操作发送到这个事件循环。当数据可用时,回调被调用。

      假设一个线程正在执行回调 A。它继续执行,并说它找到另一个异步任务。它为该异步任务注册新的回调 B。在等待 B 的数据的同时,它开始执行一些其他的回调 C。一旦 C 完成。然后检查B的数据是否可用。如果是,则执行 B。否则执行其他一些回调 D...等等..

      阅读本文以深入了解http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

      【讨论】:

        猜你喜欢
        • 2021-12-27
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多