我想知道Node.js中的数据访问是否需要互斥锁/锁。例如,假设我已经创建了一个简单的服务器。服务器提供了几种协议方法,可以添加到内部阵列中或从内部阵列中删除。我需要使用某种互斥量保护内部阵列吗?
我了解Javascript(因此Node.js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?如果真是这样,我的应用程序可能正在读取数组的过程中,被打断以运行事件回调以更改数组,然后继续处理该事件回调已更改的数组。
我想知道Node.js中的数据访问是否需要互斥锁/锁。
不!在没有其他代码可运行时立即处理事件,这意味着不会发生争用,因为只有当前正在运行的代码才能访问该内部数组。作为节点是单线程的副作用,长时间的计算将阻止所有其他事件,直到完成计算为止。
我了解Javascript(因此Node.js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?
不,事件不会中断。例如,如果将a while(true){}放入代码中,它将停止执行任何其他代码,因为总有另一个循环要运行。
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 :)