Node.js 中的异步查询是否有助于克服实时数据流中的延迟?

Do Asynchronous Queries In Node.js Help Overcome Latency In Real-Time Data Stream?

Node.js 的新手,正在使用 node.js 研究实时数据流 - 我知道实时数据流是开发 node.js 的主要原因。如果异步查询有助于克服实时数据流中的延迟,有人可以回答或提供文章吗?

node.js 背后的想法之一是服务器不应该阻塞等待 I/O(网络、磁盘 reads/writes、硬件接口等)。要在 node.js 编程中实现这一点,必须始终使用异步接口来执行任何这些可能耗时的操作。

将服务器编写为以这种方式工作,然后编写以这种方式使用它的代码有很多优点,因为核心服务器进程本身相对高度可用(因为它从不调用可能会阻塞的函数一阵子)。因此,单个服务器进程可以同时处理很多事情。

其他允许阻塞的服务器 I/O 发现除非它们实现多线程(因此它们也可以同时处理多个请求),否则它们会非常无响应。即使给定的 CPU 一次只处理一件事,当您有多个线程时,您可能有 9 个线程都被某种 I/O 阻塞,而第 10 个线程实际上正在将数据返回到一个请求。

人们发现 node.js 方法对于某些类型的操作具有一定的规模优势,因为异步编程最终是一种资源较少的方法,可以为所有请求提供服务 I/O,然后一种需要一堆线程的方法。还有其他优点(例如 node.js 中的非线程请求与其他服务器中的线程请求之间的同步要简单得多)。

node.js 模型也有很多缺点(编写异步代码的编程负担、不公平的调度模型等...)。


好的,所有这些都是您最初问题的背景:

May someone either answer or provide an article to if Asynchronous Queries help overcome latency in real-time data streaming?

答案是肯定的。如果您的服务器执行大量 I/O(我假设 "real-time data streaming" 可能属于重 I/O),那么异步 I/O 模型可以更具可扩展性比线程同步模型。它将一些编程负担转移到开发人员身上,但从中获得了一些好处。我说 "sort of" 是因为这里没有绝对值。一切都取决于具体情况,具体是做什么以及如何做。

但是,如果我需要向大量客户端进行近乎实时的数据流传输,我可能会使用使用异步 I/O 模型的服务器集群,例如 node.js

另请注意,您不必使用 node.js 进行异步 I/O 编程。也有能力在其他一些环境中进行这种类型的开发。但是,它是 node.js 设计的核心特征。