当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
可能是一个愚蠢的问题,但是如果程序异步写入文件,并且在它仍在写入时访问该文件,那么内容是否搞砸了? 实际上,无论您是同步还是异步访问文件都无关紧要:如果您在阅读过程中某
可能是一个愚蠢的问题,但是如果程序异步写入文件,并且在它仍在写入时访问该文件,那么内容是否搞砸了? 实际上,无论您是同步还是异步访问文件都无关紧要:如果您在阅读过程中某些其他进程(您或其他人)修改了该文件,您将得到不一致的结果.

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

在节点的默认值mode(w)中,打开文件时会截断文件的现有内容.

>飞行中的读取将提前停止(没有错误),这意味着您只有原始文件的百分比.
>写入开始后读取将读取最后写入的字节.根据写入的距离和快速以及读取文件的方式,读取可能会也可能看不到完整的文件.

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

无论您是使用流(即createReadStream),readFile还是readFileSync,都是如此.当节点正在将文件缓冲到内存中时,可以更改磁盘上文件的任何部分. (这里唯一值得注意的例外是,如果你在同一个进程中使用writeFileSync然后使用readFileSync,因为写入调用会阻止读取开始直到写入完成.但是,这仍然不能阻止其他进程更改文件mid-read,你不应该使用同步方法.)

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

网友评论