首页 > 解决方案 > 是否可以在 Node.js 中一次从两个线程写入文件?

问题描述

我发现这个问题在别处或多或少被问到,用不太清楚的语言,但答案是

“我怀疑你有任何理由。”

这似乎不是一个有效的答案,考虑到它是否从根本上是可能的(它很可能不是),它将允许我们在并行线程中更快地生成大型(100GB+)文件。现在,如果您的数据结构真的可以以这种并行方式编写,那么您可能只需在 16 个线程上编写 16 个不同的文件就可以了。这可能就是我要做的。

但出于好奇,假设我们真的非常希望将所有数据存储在一个文件中。可以多个

fs.createWriteStream(filePath)

从单独的线程调用并成功并行写入同一文件中的位置?

我在文档中找不到任何关于此的信息,尽管我怀疑答案只是“不”。

标签: node.jsmultithreadingfs

解决方案


您不能同时从两个单独的线程安全地附加到同一个文件。每个线程都有自己的文件句柄和自己的写入位置,并且每个文件将数据写入的位置存在并发问题。

fs.createWriteStream(filePath)是否可以从单独的线程调用多个并成功并行写入同一文件中的位置?

不,你不能安全地做到这一点。每个线程都会有并发问题来跟踪写入位置应该设置在哪里。您将需要一些并发管理来对写入进行排序并跟踪每个写入的位置。

您可以只让一个线程完成所有写入,并让每个正在生成数据的线程将其数据发送到正在执行写入的一个线程,以此作为安全排序写入的一种方式。


推荐阅读