假设我有这段代码:
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
,上面的代码会被拆分成单独的文件等。)
另一个问题:忘记节点并一般说话:在单个过程的任何语言中,两个函数可以在完全相同的时间执行(即以与上面相同的方式)?
答案 0 :(得分:5)
不,每个回调都将在自己的“执行框架”中执行。在其他语言中,如果操作发生在不同的线程中,则“并行执行”和由此引起的锁定的潜在冲突是可能的。
答案 1 :(得分:1)
只要回调代码纯粹是同步,就没有两个函数可以并行执行。 开始使用内部的一些异步内容,比如获取网络结果或插入数据库,tadam:你会遇到并行问题。