假设此代码在node.js express应用程序内运行。假设两个不同的客户端请求索引资源。称这些客户为ClientA和ClientB。假设ClientA在ClientB之前请求索引资源。在这种情况下,控制台将为ClientA记录值1,控制台将记录ClientB的值2。我的主要问题是:每个客户端请求是否获得自己的轻量级进程,路由器是这些进程之间的共享代码部分,路由器可见的变量但不是路由器的一部分是共享堆,当然每个客户端都有自己的堆?我的子问题是:如果对我的主要问题是肯定的,那么在这个例子中,每个客户端都必须排队等待锁定global_counter才能递增,对吗?
var global_counter = 0;
router.get('/', function (req, res) {
global_counter += 1;
console.log(global_counter);
res.render('index');
});
答案 0 :(得分:1)
不。单线程/进程。并发是通过工作队列完成的。将内容放入工作队列的一些方法包括setTimeout()和nexttick()。查看http://howtonode.org/understanding-process-next-tick
一次只能运行一件事,因此无需进行任何锁定。
需要一段时间让你的大脑热身于这个想法。