【问题标题】:What is No-Buffering feature of Node.jsNode.js 的无缓冲特性是什么
【发布时间】:2017-03-04 13:25:55
【问题描述】:

到处都提到 Node.js 没有缓冲功能。例如来自教程点:

No Buffering - Node.js 应用程序从不缓冲任何数据。这些应用程序只是以块的形式输出数据。

但这意味着什么? Node.js 有一个 Buffer 类,根据 Buffer 类定义

纯 JavaScript 不能很好地处理直接的二进制数据,尽管 JavaScript 是 Unicode 友好的。在处理 TCP 流和读写文件系统时,需要处理纯二进制的数据流。

这是正确的。

那么,“No Buffering”在 Node.js 中的特点是什么?

Node.js 如何坚持无缓冲?谁能举例说明一下?

【问题讨论】:

  • 仍在寻找答案....

标签: node.js buffer


【解决方案1】:

虽然 Node.js 允许您使用数据流(即分块数据),但这并不一定意味着“Node.js 从不缓冲数据”——这取决于开发人员来处理.

典型的流式处理是通过创建一个回调来完成的,该回调在一段时间内接收数据、对该数据执行某些操作或将其处理到另一个流。

这意味着数据的消费者可以更轻松地获取数据,而无需等待整个操作完成。

这就是 TutorialPoint 所逃避的,虽然说得不好——而且在很大程度上是不正确的。


缓冲实际上是处理可流式数据的关键。 从某种意义上说,实际数据将驻留在缓冲区中,直到您的 回调 将数据从流中拉出以进行处理。

这就是为什么 Node.JS 有 Buffer 类和库(例如 stream-buffers)来方便流数据访问。


处理流和缓冲区的一个常见痛点是:“背压”


这是当您有一个包含 ProducerConsumer 的数据流,但由于负载问题,您的 Consumer 在快速消费数据方面落后了与生产者将数据泵入流中的速度相比,速度足够了。

这会导致所谓的“背压”效应,如果生产者不受速率限制,可能会导致系统崩溃。

背压与讨论相关,因为它是由缓冲区填充速度快于您的回调将数据推送回用户或其他流而引起的。

因此,缓冲(在某种程度上)对于 Node.js 的操作至关重要,也是它处理连续数据流的方式。 这就是存在 Buffer 类的原因,以及流式缓冲区 - 促进回调之间的数据移动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多