我知道在nodejs中推荐写异步函数。但是,我觉得异步编写一些非IO事件并不是那么必要。我的代码可能会变得不那么方便。例如:
//sync
function now(){
return new Date().getTime();
}
console.log(now());
//async
function now(callback){
callback(new Date().getTime());
}
now(function(time){
console.log(time);
});
在这种情况下,sync
方法会阻塞 CPU 吗?这足以让我改用 async
吗?
最佳答案
如果被调用的方法可以长时间阻塞等待 IO,那么异步样式是必需的。由于 node.js 事件循环是单线程的,因此您希望在 IO 期间屈服于事件循环。如果您不这样做,则每个时间点可能只有一个未完成的 IO。这将导致完全不可扩展。
对 CPU 工作使用回调无济于事。它不会解除事件循环的阻塞。事实上,对于 CPU 工作来说,解除事件循环的阻塞是不可能的。 CPU必须被占用一定的时间,这是不可避免的。 (忽略这里的网络 worker 之类的东西)。
回调不是什么好东西。当您必须时,您可以使用它们。它们是 node.js 事件循环 IO 模型的必然结果。
也就是说,如果您稍后计划将 IO 引入 now
,您可能会急切地使用回调样式,即使并非绝对必要。稍后从同步调用更改为基于回调的调用可能会很耗时,因为回调样式是病毒式传播的。
关于node.js - 回调问题太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341806/