var a = {};为全局变量,write(a)基于事件,可对a进行修改。 想问的是,当一个子线程收到事件,正在对a进行修改的同时,主线程调用get(a)尝试读取a的值。会怎样?
Node中执行js程序时是单线程的,不可能出现这个问题
我一直困惑,在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是单线程异步回调,里面只有进程的概念了
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
Node中执行js程序时是单线程的,不可能出现这个问题
我一直困惑,在event loop里面,某个事件被激活要去执行的时候,是node主进程去执行,还是底层C代码会fork一个子线程去执行? 如果是后者,怎么保证不冲突呢。
如果如你所说不可能出现,我想设计一个用例去证明。这个用例的设计能否不吝赐教?
@agileKD
是的,nodejs是单线程异步回调,里面只有进程的概念了