在节点Js中使用asynchronousfunction而不是使用asynchronousfunction有什么好处?

现在我遇到了一个区分asynchronous函数和同步函数的文章。 从我对不同例子和解释的理解中,同步函数被阻塞,而asynchronous函数不被阻塞。 但是我想知道在使用中是否有任何性能优势?

在节点Js中使用asynchronousfunction而不是使用asynchronousfunction有什么好处?

是的 ,在node.js中使用asynchronous,非阻塞API调用有显着的性能优势。

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

如果您调用asynchronous的非阻塞API,那么node.js可以自由地处理其他请求,而非阻塞API正在工作。 这极大地提高了您的服务器的响应能力和可伸缩性。

事实上,你几乎不可能有一个可用的多用户服务器进程,其中有大量的阻塞,同步调用。 他们只会毁了服务器的可扩展性。 这是非阻塞的asynchronousdevise,为node.js提供了最佳的可伸缩性特性,因为它可以以比实际的OS线程中需要为每个并行进程提供服务的线程系统轻量级的方式进行扩展,并且需要使用线程同步API以访问共享数据。

现在,假设你只是编写一个单用户脚本来在你自己的计算机上本地运行(比如你想处理一堆文本文件来索引它们中的所有单词,作为一次性进程的一部分)。 如果您不是一次尝试处理多个文件或一次满足多个用户的需求,那么对于您的最终解决scheme而言,无论您是使用阻止还是非阻止API调用都是完全没有区别的,因为当您是在一个阻塞的调用,没有什么别的你的node.js过程做任何事情。 仅在这种情况下,使用阻塞API调用进行编码可能会更简单。

是。 尽pipeNode是单线程的,但使用asynchronous函数的速度还是比较快的。 例如,当文件从磁盘读取时,或者在等待http请求完成时,节点可以处理其他事情。