node.js - 是否可以在 Node.js 中一次从两个线程写入文件?
问题描述
我发现这个问题在别处或多或少被问到,用不太清楚的语言,但答案是
“我怀疑你有任何理由。”
这似乎不是一个有效的答案,考虑到它是否从根本上是可能的(它很可能不是),它将允许我们在并行线程中更快地生成大型(100GB+)文件。现在,如果您的数据结构真的可以以这种并行方式编写,那么您可能只需在 16 个线程上编写 16 个不同的文件就可以了。这可能就是我要做的。
但出于好奇,假设我们真的非常希望将所有数据存储在一个文件中。可以多个
fs.createWriteStream(filePath)
从单独的线程调用并成功并行写入同一文件中的位置?
我在文档中找不到任何关于此的信息,尽管我怀疑答案只是“不”。
解决方案
您不能同时从两个单独的线程安全地附加到同一个文件。每个线程都有自己的文件句柄和自己的写入位置,并且每个文件将数据写入的位置存在并发问题。
fs.createWriteStream(filePath)
是否可以从单独的线程调用多个并成功并行写入同一文件中的位置?
不,你不能安全地做到这一点。每个线程都会有并发问题来跟踪写入位置应该设置在哪里。您将需要一些并发管理来对写入进行排序并跟踪每个写入的位置。
您可以只让一个线程完成所有写入,并让每个正在生成数据的线程将其数据发送到正在执行写入的一个线程,以此作为安全排序写入的一种方式。
推荐阅读
- php - Possible to use an associative array as $needle for in_array function?
- python - Python Owlready2 Ontology Creation and Reasoning,Cannot save function错误,同时保存equal_to
- reactjs - Typescript:如何声明一个包含所有扩展通用类型的类型的类型?
- android - How to save the state of button onced pressed
- python - displaying count acording to connection time and source
- jenkins - 如何在声明性管道中设置作业令牌?
- javascript - 如何将 vue 示例导入独立的 html 文件?
- java - 无法在项目上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile (default-testCompile)
- string - 将字符串 k*horizontally 和 v*times 垂直相乘
- actions-on-google - 通过 Auth0 使用帐户链接,但将其重定向到我的后端