Node.js 中是否可以同时从两个线程写入文件?

Viz*_*ary 2 multithreading fs node.js

我发现这个问题或多或少在其他地方以不太清晰的语言提出,但答案是

“我怀疑你有什么理由这么做。”

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

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

fs.createWriteStream(filePath)
Run Code Online (Sandbox Code Playgroud)

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

我在文档中找不到任何相关信息,尽管我怀疑答案是否定的。

jfr*_*d00 5

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

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

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

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