在 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
对于每个进程都是唯一的。
所以在任何情况下你都不需要担心 longTask
和 shortTask
会被同时调用。
PS 请参阅 this video 以更好地理解异步内容。
在 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
对于每个进程都是唯一的。
所以在任何情况下你都不需要担心 longTask
和 shortTask
会被同时调用。
PS 请参阅 this video 以更好地理解异步内容。