5

_writev()node.js中的正确用法是什么?文档说:

如果流实现能够一次处理多个数据块,writable._writev()则应实现该方法。

它还说:

的主要目的writable.cork()是避免将许多小块数据写入流不会导致内部缓冲区中的备份对性能产生不利影响的情况。在这种情况下,实现该writable._writev()方法的实现可以以更优化的方式执行缓冲写入。

从流实现的角度来看,这是可以的。但从可写流消费者的角度来看,调用writeor的唯一方法是通过andwritevWritable.write()writable.cork()

我想看一个小例子来描述实现的实际用例_writev()

4

2 回答 2

6

除了 之外,还可以将writev方法添加到实例中write,如果流包含多个块,则将选择该方法而不是write. 例如 Elasticsearch 允许你批量插入记录;因此,如果您正在创建一个 Writable 流来包装 Elasticsearch,那么使用一种方法执行单个批量插入而不是多个单独的插入是有意义writev的,它的效率要高得多。这同样适用,例如,对于 MongoDB 等。

这篇文章(不是我的)展示了一个 Elasticsearch 实现https://medium.com/@mark.birbeck/using-writev-to-create-a-fast-writable-stream-for-elasticsearch-ac69bd010802

于 2019-02-18T20:58:03.213 回答
1

_writev()在使用时调用uncork()。节点文档中有一个简单的示例。

stream.cork();
stream.write('some ');
stream.write('data ');
process.nextTick(() => stream.uncork());

更多见,

https://nodejs.org/api/stream.html#stream_writable_uncork https://github.com/nodejs/node/blob/master/lib/_stream_writable.js#L257

于 2017-01-05T03:16:49.000 回答