node 全局变量的读写并发
var a = {};为全局变量,write(a)基于事件,可对a进行修改。 想问的是,当一个子线程收到事件,正在对a进行修改的同时,主线程调用get(a)尝试读取a的值。会怎样?
4 回复
Node中执行js程序时是单线程的,不可能出现这个问题
我一直困惑,在event loop里面,某个事件被激活要去执行的时候,是node主进程去执行,还是底层C代码会fork一个子线程去执行? 如果是后者,怎么保证不冲突呢。
如果如你所说不可能出现,我想设计一个用例去证明。这个用例的设计能否不吝赐教?
var fs = require('fs');
// 读取某个目录下的文件,模拟多个并发io操作
var dir = '/tmp';
fs.readdirSync(dir).forEach(function (f) {
fs.stat(dir + '/' + f, function (err) {
// 这里是回调函数,下面弄个死循环来阻塞当前线程,
// 如果还能陆续看到其他输出,表示是多线程执行的,
// 否则是单线程执行的
console.log(f);
var i = 0;
while (true) {
i++;
}
});
});
是的,nodejs是单线程异步回调,里面只有进程的概念了