CNode

node 全局变量的读写并发

Aagilekd发布于14 年前最后回复14 年前5 回复7779 浏览0 收藏

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

查看回复

回复 (4)

L
leizongmin#1·14 年前

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

A
agilekd#2·14 年前
引用 leizongminNode中执行js程序时是 单线程 的,不可能出现这个问题

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

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

L
leizongmin#3·14 年前
引用 leizongminNode中执行js程序时是 单线程 的,不可能出现这个问题

@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++;
    }
  });
});
A
a272121742#4·14 年前

是的,nodejs是单线程异步回调,里面只有进程的概念了

参与回复
登录后即可参与回复。登录