node 全局变量的读写并发
发布于 2年前 作者 agilekd 1186 次浏览

var a = {};为全局变量,write(a)基于事件,可对a进行修改。 想问的是,当一个子线程收到事件,正在对a进行修改的同时,主线程调用get(a)尝试读取a的值。会怎样?

5 回复

Node中执行js程序时是单线程的,不可能出现这个问题

nodejs目前没有线程概念,只有进程。 以后可能会加入类似与协程的概念,但最新版本被否掉了还没有加入。

我一直困惑,在event loop里面,某个事件被激活要去执行的时候,是node主进程去执行,还是底层C代码会fork一个子线程去执行? 如果是后者,怎么保证不冲突呢。

如果如你所说不可能出现,我想设计一个用例去证明。这个用例的设计能否不吝赐教?

@agileKD

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是单线程异步回调,里面只有进程的概念了

回到顶部