我想知道 Node.js 中的数据访问是否需要互斥锁/锁。例如,假设我创建了一个简单的服务器。服务器提供了几个协议(protocol)方法来添加到内部数组和从内部数组中删除。我需要用某种类型的互斥锁来保护内部数组吗?
我了解 Javascript(因此 Node.js)是单线程的。我只是不清楚如何处理事件。事件会中断吗?如果是这种情况,我的应用程序可能正在读取数组,被中断以运行更改数组的事件回调,然后继续处理现在已被事件回调更改的数组。
最佳答案
锁和互斥锁有时确实是必要的,即使 Node.js 是单线程的。
假设您有两个文件必须具有相同的内容,并且不具有相同的内容被认为是不一致的状态。现在假设您需要在不阻塞服务器的情况下更改它们。如果你这样做:
fs.writeFile('file1', 'content', function (error) {
if (error) {
// ...
} else {
fs.writeFile('file2', 'content', function (error) {
if (error) {
// ...
} else {
// ready to continue
}
});
}
});
当同一脚本中的另一个函数可能能够读取这两个文件时,您会在两个调用之间处于不一致的状态。
rwlock模块非常适合处理这些情况。
关于javascript - Node.js 和互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5481675/