在NodeJS中:两个回调是否可以同时执行?

时间:2012-10-16 22:37:21

标签: node.js

假设我有这段代码:

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);

12是否可以互换地打印到stdout(例如12121212121...)?

我已经对此进行了测试,并且他们没有交替使用,即1111111...222222222...,但很少有测试远非证明,我担心111111211111...2222222...之类的事情可能会发生。

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

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

另一个问题:忘记节点并一般说话:在单个过程的任何语言中,两个函数可以在完全相同的时间执行(即以与上面相同的方式)?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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