node.js - 回调问题太多

标签 node.js asynchronous

我知道在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/

相关文章:

javascript - Selenium 与 JavaScript 和 Nodejs : How to count elements on page?

javascript - 两人 - 回合制游戏

node.js - if (err) throw err 总是显示 process.nextTick(function){throw err;});

javascript - 我应该如何在http post请求的请求有效负载中传递json数据

asynchronous - Weld - 异步事件观察器

javascript - React Native 中组件之间的通信(子 -> 父)

单例和委托(delegate)中的 C# 异步 SQL

sql - oracle sql如何做异步查询

javascript - 在 node.js 中编写 while 循环

iphone - NSURLConnection 异步间歇性地返回 null