gpt4 book ai didi

node.js - Node JS 是异步读/写安全的吗?

转载 作者:搜寻专家 更新时间:2023-10-31 23:17:48 24 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但如果程序正在异步写入文件,而您在文件仍在写入时访问该文件,内容是否搞砸了?

最佳答案

事实上,无论您是同步访问文件还是异步访问文件都无关紧要:如果其他进程(您的或其他人的进程)在您读取文件的过程中修改了文件,您将得到不一致的结果。

您将看到的不一致的确切类型取决于文件的写入方式和读取开始的时间。

Node 默认的mode (w),文件的现有内容在打开文件时被截断。

  • 进行中的读取会提前停止(不会出错),这意味着您将只有原始文件的一部分。
  • 在写入开始后开始的读取将读取到最后写入的字节。根据写入的距离和速度以及您读取文件的方式,读取可能会或可能不会看到完整的文件。

如果文件以r+ 模式写入,则在打开文件进行写入时,内容不会被截断。这意味着读取将看到部分旧数据和部分新数据。如果写入更改了文件大小,事情就会变得更加困惑。

无论您是否使用流(即createReadStream)、readFile,甚至是readFileSync,这都是正确的。当 Node 正在将文件缓冲到内存中时,磁盘上文件的任何部分都可以更改。 (这里唯一值得注意的异常(exception)是,如果您在同一进程中使用 writeFileSync 然后使用 readFileSync ,因为写入调用会阻止读取开始直到写入完成之后。但是,这仍然不能阻止其他进程在读取过程中更改文件,并且您无论如何都不应该使用同步方法。)

换句话说,读取和写入文件是非原子的。为避免不一致,您应该使用临时名称写入文件,然后写入 rename。它在写入完成时。

关于node.js - Node JS 是异步读/写安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com