【发布时间】:2014-08-07 00:00:58
【问题描述】:
人们说像 Javascript 这样的单线程语言不能解决这个问题。然而,nodejs 提供了cluster 来分叉多个worker。这会导致race condition 问题吗?
另外,我有一个例子有时会引起我的困惑:
ALLSESSIONS = {};
//session id saved in cookie
ALLSESSIONS[sessionid] = 'somevalue';
var SESSION = ALLSESSIONS[sessionid];
... do stuff for sometimes
console.log(SESSION);
恐怕当当前请求还在运行时另一个请求到达节点时,它可能会用自己的会话ID覆盖SESSION变量,那么当前请求的结果是undetermined。
这会发生在节点中吗?
【问题讨论】:
-
This question 回答了您关于比赛条件的一些问题。是的,如果您以这种方式编写程序,您可能有两个单独的请求发生冲突,但在大多数情况下,您的请求不应写入全局变量。不过,这不是
cluster引入的问题,错误地编写异步代码时也会发生这种情况。如果您有任何希望我们调试的真实代码,请向我们展示,因为您的示例描述性不强。