2012-10-16 58 views
4

比方说,我有这样的代码:在NodeJS中:两个回调是否可以同时执行?

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和上面的代码会被分裂成单独的文件等)

另一个问题:忘记的节点上,一般来说:在单一过程中的任何语言中,两种功能是否可以在同一时间执行(即以与上述相同的方式)?

回答

5

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

1

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

相关问题