在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)
当shortTask
仍在运行时,longTask
可能会被调用
我担心的是,当发生这种情况时,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是单线程的 那么,这是一个问题吗?
答案 0 :(得分:1)
Node
是单线程的,它使用异步模型而不是多线程。两段代码同时运行是不可能的。您可以在多个流程中运行代码(使用child_process
或cluster
模块在节点中可以运行),但在这种情况下,全局someValue
对于每个流程都是唯一的。
因此,在任何情况下,您都不必担心会同时调用longTask
和shortTask
。
PS 请参阅this video以更好地了解异步内容。