javascript - Node.js 和互斥锁

标签 javascript node.js

我想知道 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/

相关文章:

javascript - 如何将数组传递给 jquery jaudio 中的函数

mysql - 如何从函数内部的查询获取结果

javascript - 如何在nodejs中播放存储在Buffer中的音频?

javascript - 使用显示表和 float 的响应式网格

javascript - 错误 : Still Getting Error after setting allowLargeResults to true in job configuration?

javascript - HoganJs 和 AngularJs 与 NodeJs

objective-c - 适用于 Node.js 或 Objective-C 的 Google Drive Realtime API SDK?

javascript - 如何将数组的内容输出到 HTML div 容器?

javascript - Jquery不能使用3个选择器

javascript - 如何通过分配 window.location 在历史记录中留下链接?