2013-12-17 81 views
3

我是NodeJS的新手。我已经看到,对于同一任务,有单独的异步和同步功能(例如:{fs.writeFile,fs.writeFileSync},{fs.read, fs.readSync})。NodeJS中的异步Vs同步

任何人都可以解释这是为什么吗?有什么区别?

+1

你明白异步的含义吗? – SLaks

+0

是的。我还没有看到异步和同步功能在任何其他编程或脚本语言中执行相同的任务。这就是我问这个的原因。 –

+0

C#具有大多数非阻塞操作的同步和异步版本。 – SLaks

回答

7

异步:

  1. 发送请求
  2. 去与其他代码
  3. 响应进来的任何时间上的回调

同步:

  1. 发送请求
  2. 等待响应
  3. 响应之后继续与其它代码
7

之所以具有这些操作的两个同步和异步verisons是,它们可以是耗时的,并且由于node.js的具有单层线程化的主事件循环,你不会在任何情况下想用慢同步函数调用来阻塞事件循环。

这就是为什么一切都使用回调(或承诺,誓言,或者你在异步的东西碰巧是什么特别的味道)来完成的。通过这种方式,您可以拥有一个事件循环,只需调用异步函数并在回调中处理异步函数的结果即可。

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

+0

我听说过承诺(因为jQuery),但没有任何誓言......如果你有任何文章链接,以帮助理解这个概念更好,我会感激。谢谢。 – alexserver

+0

我想我在写这个答案时意外地混淆了两个概念,我可能指的是期货。这里有一篇文章,如果你需要的话:http://en.wikipedia.org/wiki/Futures_and_promises 然而,有一个npm模块叫做wovs,它是一个BDD工具/框架 – Frost

2

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

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

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

不过,也有像一些情况:

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