【问题标题】:Asynchronous Vs synchronous in NodeJSNodeJS 中的异步与同步
【发布时间】:2014-01-05 06:17:33
【问题描述】:

我是 NodeJS 的新手。我已经看到同一个任务有不同的异步和同步函数(例如:{fs.writeFile,fs.writeFileSync},{fs.read, fs.readSync})。

谁能解释这是为什么?有什么区别?

【问题讨论】:

  • 你明白异步是什么意思吗?
  • 是的。我还没有看到用任何其他编程或脚本语言执行相同任务的异步和同步函数。这就是我问这个的原因。
  • C# 具有大多数非阻塞操作的同步和异步版本。
  • 好的。但它并没有回答我的问题:P

标签: javascript node.js


【解决方案1】:

异步:

  1. 发送请求
  2. 继续其他代码
  3. 在回调时随时响应

同步:

  1. 发送请求
  2. 等待回复
  3. 响应后继续其他代码

【讨论】:

    【解决方案2】:

    同时拥有这些操作的同步和异步版本的原因是它们可能很耗时。由于 node.js 有一个单线程的主事件循环,你在任何情况下都不想用慢速同步函数调用阻塞事件循环。

    这就是为什么一切都是使用回调/承诺/期货来完成的。这样,您可以有一个事件循环,它只调用一个异步函数,并在异步函数的结果发生时在回调中处理它。

    这是 node.js 的主要优势之一,也是基本规则之一:“不要阻塞主事件循环”。

    【讨论】:

    • 我听说过 promises(因为 jQuery),但没有关于 vows... 如果您有任何文章链接以帮助更好地理解这些概念,我将不胜感激。谢谢。
    • 我想我在写这个答案时不小心混淆了我脑海中的两个概念,我可能指的是期货。这里有一篇文章,如果你需要的话:en.wikipedia.org/wiki/Futures_and_promises 但是有一个名为 wovs 的 npm 模块,它是一个 BDD 工具/框架
    【解决方案3】:

    参考node.js fs.writeFile doc,它将数据异步写入文件。 这意味着如果您有以下代码:

    1. some db operation
    2. some non-related db operation
    

    在这种情况下,第一个操作不会阻塞第二个操作。第二次操作在第一次之后立即执行(无需等待完成)

    但是,有一些场景,例如:

    1. some db operation 
    2. some related db operations(which you can't put in callbacks) and forcefully want to be after 1st operation.
    

    然后使用fs.writeFileSync。

    【讨论】:

      【解决方案4】:

      同步是一个阻塞调用,线程被阻塞直到调用结束。异步是非阻塞调用,线程继续执行剩下的,为什么要单独执行调用。

      引用NodeJS Documentations:

      阻塞是在Node.js中执行额外的JavaScript 进程必须等到非 JavaScript 操作完成。这 发生是因为事件循环无法继续运行 发生阻塞操作时的 JavaScript。

      阻塞方法执行同步和非阻塞方法 异步执行。

      Async 方法与 Sync 方法的使用:

      如果您调用的是 I/O 操作(文件、数据库访问等)之类的扩展操作,请使用异步方法,因为您不希望在执行扩展操作时阻塞整个过程。

      但如果是常规调用,其结果对于进程的其余部分运行很重要,请使用 Sync 方法,在该方法中进程将暂停直到调用完成。

      例如,如果您使用 AWS lambda,则进行异步调用(将异步执行 I/O 操作)可能会在其余过程完成后立即终止 Lambda 函数。因此,确定何时使用同步调用和异步调用非常重要。

      欲了解更多信息,请阅读以下doc。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-14
        • 2019-06-14
        • 2013-08-01
        • 2015-02-23
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-09
        相关资源
        最近更新 更多