假设我有以下代码:
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
,上面的代码将被拆分为单独的文件等。
另一个问题:忘记节点并笼统地说:在单个进程的任何语言中,是否可以同时执行两个函数(即以与上述相同的方式)?
不,每个回调都将在其自己的"执行帧"中执行。在其他语言中,如果操作发生在不同的线程中,"并行执行"和潜在的冲突,因为由此引起的锁是可能的。
只要回调代码是纯同步的,那么就没有两个函数可以并行执行。开始使用一些异步的东西,比如获取网络结果或插入数据库,tadam:你会遇到并行性问题。