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)
M
要锁吧 ...
M
不过这方面资料好像没有...
N
用fs.appendFile
L
一个程序员碰到了一个问题,他决定用多线程来解决。现在两个他问题了有
H
@Neil-UWA 为啥?这个和writestream.write有什么区别或者好处吗?看了一下官方文档,好像并没有什么特殊说明
H
@LeslieYQ 能不能不要这么逼?逗
H
@yjhjstz time不一样啊,与内容无关啊,并且,如果有问题的话\n和\t还有time会在不正常的地方出现啊
Z
追加写没关系的,行不会被破坏,你的需求也就是行不会被其它进程截断吧 @hisune
H
@zhangzifa 对,如果行的内容足够长的情况也不想他被其他进程截断。但是为什么呢?大神能解释一下吗?
Z
引用 hisune@zhangzifa 对,如果行的内容足够长的情况也不想他被其他进程截断。但是为什么呢?大神能解释一下吗?
@hisune 最终调用的c函数已经做了保护了。linux/freeBSD下没问题,windows下不是很确定。
H
@zhangzifa 多谢
参与回复
登录后即可参与回复。登录