Performance Dart-异步与同步性能注意事项

Performance Dart-异步与同步性能注意事项,performance,asynchronous,dart,async-await,Performance,Asynchronous,Dart,Async Await,使用async/await非常有感染力,我的代码中到处都是异步方法。这让我想知道:这些电话之间有什么区别吗?性能如何 class SomeClass{} //Sync return SomeClass syncMethod(){ return SomeClass(); } //Immediate async return Future<SomeClass> asyncMethod() async{ return SomeClass(); } //Await an imm

使用
async/await
非常有感染力,我的代码中到处都是异步方法。这让我想知道:这些电话之间有什么区别吗?性能如何

class SomeClass{}

//Sync return
SomeClass syncMethod(){
  return SomeClass();
}

//Immediate async return
Future<SomeClass> asyncMethod() async{
  return SomeClass();
}

//Await an immediate async return
Future<SomeClass> otherAsyncMethod() async{
  SomeClass someClass = await asyncMethod();
  return someClass;
}
class-SomeClass{}
//同步返回
SomeClass同步方法(){
返回SomeClass();
}
//即时异步返回
Future asyncMethod()异步{
返回SomeClass();
}
//等待立即异步返回
未来的otherAsyncMethod()异步{
SomeClass SomeClass=await asyncMethod();
返回某个类;
}

谢谢大家!

异步操作确实有开销。它们创建未来,将侦听器附加到这些未来,安排微任务,异步完成未来,等等。所有这些都不可避免地需要额外的时间和空间,而不仅仅是在堆栈上返回值,而且,由于异步操作可能与其他操作交错,因此您也会获得更多的延迟

异步函数,如

Future-foo(Future-bar())异步{
打印(“之前”);
var结果=等待条();
打印(“之后”);
返回结果;
}
相当于编写为以下内容的函数:

Future foo(Future bar()){
var$c=Completer();
打印(“之前”);
bar()。然后((int结果){
打印(“之后”);
$c.完成(结果);
},onError:(东、南){
$c.完全错误(e,s);
});
返回$c.future;
}
编译器会尝试这样做(但可能不如手工重写好)。所有这些额外的未来管理对于异步函数来说都是必要的开销

这也是异步的优点:在等待fx、I/O操作时,您可以执行其他操作。即使有开销,正确编写的异步程序仍然可以比所有I/O操作都阻塞时更快地完成。有时候不是

如果您的程序执行I/O,那么除非它是一个非常专业的程序,否则很可能I/O时间将主导其他所有事情