发出太多回调问题

use*_*697 4 asynchronous node.js

我知道在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);
});
Run Code Online (Sandbox Code Playgroud)

请问sync方法块CPU在这种情况下?这是非常显着的,我应该使用async吗?

usr*_*usr 8

如果被调用的方法可以长时间等待IO,则需要异步样式.由于node.js事件循环是单线程的,因此您希望在IO期间屈服于事件循环.如果你没有这样做,每个时间点只能有一个IO未完成.这将导致完全不可扩展性.

使用回调进行CPU工作无需任何操作.它不会解锁事件循环.实际上,对于CPU工作,不可能解除阻塞事件循环.CPU必须占用一段时间,这是不可避免的.(无视网络工作者这样的事情).

回调没什么好处.当您在使用他们必须.它们是node.js事件循环IO模型的必然结果.

也就是说,如果您以后计划将IO引入now您,即使不是绝对必要,也可能急切地使用回调样式.稍后从同步调用更改为基于回调的调用可能非常耗时,因为回调样式是病毒式的.