在节点J中使用异步功能优于同步功能是否有任何性能优势?

时间:2017-04-13 22:21:54

标签: javascript node.js asynchronous synchronous

现在我遇到了一篇区分异步函数和同步函数的文章。根据我对不同示例和解释的理解,同步函数被阻止而异步函数则不被阻止。但我想知道使用它们是否有任何性能优势?

2 个答案:

答案 0 :(得分:7)

  

在Node Js中使用异步功能是否有任何性能优势?

,在node.js中使用异步,非阻塞API调用会带来显着的性能优势。

因为node.js中的Javascript是单线程的,所以调用同步阻塞函数意味着node.js在阻塞函数完成之前不能执行任何操作。如果这是一个旨在服务于许多用户请求的服务器,那意味着所有其他用户请求必须等待做任何事情,直到完成这一个阻塞,同步函数调用。这对多用户服务器来说太可怕了。

如果您调用异步,非阻塞API,那么当非阻塞API正在执行其工作时,node.js可以自由处理其他请求。这大大提高了服务器的响应能力和可扩展性。

事实上,您几乎无法拥有可用的多用户服务器进程,其中包含大量阻塞,同步调用。它们只会破坏服务器的可扩展性。这是非阻塞的异步设计,它为node.js提供了最佳的可扩展性功能,因为它可以比需要为实际OS线程中的每个并行进程提供服务并需要使用线程同步API的线程系统更轻量级地扩展。为了访问共享数据。

现在,假设您只是编写单用户脚本以在您自己的计算机上本地运行(假设您希望处理一堆文本文件以将其中的所有单词编入索引,作为一次性过程的一部分)。如果您不是一次尝试处理多个文件或同时满足多个用户的需求,那么无论您使用阻止API还是非阻塞API调用,它都可能对您的最终解决方案完全没有影响。当你处于阻塞通话中时,无论如何你的node.js进程都没有其他功能。仅在这种情况下,使用阻塞API调用进行编码实际上可能更简单。

答案 1 :(得分:1)

是。虽然Node是单线程的,但使用异步函数仍然更快。例如,节点可以在从磁盘读取文件时处理其他内容,或者在等待http请求完成时处理。