在 NodeJS 中的进程之间同步全局值

Synchronize global values between processes in NodeJS

在 NodeJS 中,我有两个操作单个全局值的异步函数,这是一个示例:

var someValue = 0;

function longTask {
    // ...
    // very long process here
    // ...
    someValue += incrementValue; // modify value
    // ...
    // very long process again
    // ...
}

function shortTask {
    // get the value
    return someValue;
}

这两个随时可以调用。 (例如,我使用 Socket.io)
longTask 仍然是 运行.
时,有可能调用 shortTask 我担心的是,当这种情况发生时,shortTask 可能会弄错 someValue

我应该把代码调整成这样吗?

var someValue = 0;
var longTaskRunning = false;

function longTask {
    longTaskRunning = true;
    // ...
    // very long process here
    // ...
    someValue += incrementValue; // modify value
    // ...
    // very long process again
    // ...
    longTaskRunning = false;
}

function shortTask {
    if (longTaskRunning) {
        setTimeout(shortTask, 500); // Delay this function
    } else {
        return someValue;
    }
}

我也听说NodeJS是单线程的
那么,这是一个问题吗?

Node 是单线程的,它使用异步模型而不是多线程。两段代码不可能同时运行。您可以在多个进程中 运行 您的代码(在节点中使用 child_process or cluster 模块是可能的),但在这种情况下,全局 someValue 对于每个进程都是唯一的。

所以在任何情况下你都不需要担心 longTaskshortTask 会被同时调用。

PS 请参阅 this video 以更好地理解异步内容。