小编典典

Node.js和互斥体

node.js

我想知道Node.js中的数据访问是否需要互斥锁/锁。例如,假设我已经创建了一个简单的服务器。服务器提供了几种协议方法,可以添加到内部阵列中或从内部阵列中删除。我需要使用某种互斥量保护内部阵列吗?

我了解Javascript(因此Node.js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?如果真是这样,我的应用程序可能正在读取数组的过程中,被打断以运行事件回调以更改数组,然后继续处理该事件回调已更改的数组。


阅读 302

收藏
2020-07-07

共1个答案

小编典典

我想知道Node.js中的数据访问是否需要互斥锁/锁。

不!在没有其他代码可运行时立即处理事件,这意味着不会发生争用,因为只有当前正在运行的代码才能访问该内部数组。作为节点是单线程的副作用,长时间的计算将阻止所有其他事件,直到完成计算为止。

我了解Javascript(因此Node.js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?

不,事件不会中断。例如,如果将a while(true){}放入代码中,它将停止执行任何其他代码,因为总有另一个循环要运行。

如果您需要长时间运行计算,最好使用process.nextTick,因为这将允许它在没有其他任何运行的情况下运行(我对此感到困惑:下面的示例表明我可能正确运行,可能不会中断)。

如果还有其他问题,请随时进入#node.js并提出问题。另外,我请几个人看看这个,并确保我没有完全错;)

var count = 0;

var numIterations = 100;
while(numIterations--) {
  process.nextTick(function() {
    count = count + 1;
  });
}

setTimeout(function() {

  console.log(count);

}, 2);

//
//=> 100
//

感谢#node.js的AAA_awright :)

2020-07-07