4

假设我有这个代码:

function fn(n)
{
  return function()
  {
    for(var k = 0; k <= 1000; ++k) {
      fs.writeSync(process.stdout.fd, n+"\n");
    }
  }
}

setTimeout(fn(1), 100);
setTimeout(fn(2), 100);

是否有可能1并且2可以stdout互换打印(例如12121212121...)?

我已经对此进行了测试,但它们并没有互换使用,即1111111...222222222...,但很少有测试无法证明,我担心会发生类似的111111211111...2222222...事情。

换句话说:当我在 Node 中注册一些回调和事件处理程序时,两个回调可以同时执行吗?

(我知道这可以通过启动两个进程来实现,但是我们会有两个stdout,上面的代码将被拆分成单独的文件,等等。)

另一个问题:忘记节点并笼统地说:在单个进程上的任何语言中,两个函数是否可以同时执行(即以与上述相同的方式)?

4

2 回答 2

5

不,每个回调都将在其自己的“执行框架”中执行。在其他语言中,如果操作发生在不同的线程中,则可能会出现“并行执行”和潜在的冲突,因为由此引起的锁定是可能的。

于 2012-10-16T22:39:46.220 回答
1

只要回调代码是纯同步的,就没有两个函数可以并行执行。开始在内部使用一些异步的东西,比如获取网络结果或插入数据库,tadam:你会遇到并行问题。

于 2012-10-17T13:57:20.110 回答