多个进程同时写某个文件需要加锁吗?
test.js
const fs = require('fs');
var time = (new Date()).getTime();
var write = fs.createWriteStream(__dirname + '/log.log', {flags: 'a'});
for(var i = 0; i < 2000000; i++){
write.write(time + "\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");
}
同时执行: node test.js node test.js 2个进程在写,奇怪的是,要过十几秒后,ll查看log.log的大小才会不为0。 并且查看内容看起来并不需要加锁。为什么呢?真的不需要加锁吗?
是一次性写入了整行的内容所以不需要加锁?
12 回复
要锁吧 …
不过这方面资料好像没有…
用fs.appendFile
一个程序员碰到了一个问题,他决定用多线程来解决。现在两个他问题了有
@Neil-UWA 为啥?这个和writestream.write有什么区别或者好处吗?看了一下官方文档,好像并没有什么特殊说明
@LeslieYQ 能不能不要这么逼?逗
你这测试,2个进程写的东西都没有区分,怎么看结果当然一样了。 另外多进行写文件,是需要加锁的,追加写有时序问题的,也需要加锁。
谢谢 @all
@yjhjstz time不一样啊,与内容无关啊,并且,如果有问题的话\n和\t还有time会在不正常的地方出现啊
追加写没关系的,行不会被破坏,你的需求也就是行不会被其它进程截断吧 @hisune
@zhangzifa 对,如果行的内容足够长的情况也不想他被其他进程截断。但是为什么呢?大神能解释一下吗?
@hisune 最终调用的c函数已经做了保护了。linux/freeBSD下没问题,windows下不是很确定。
@zhangzifa 多谢