gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:30:57 29 4
gpt4 key购买 nike

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;
}
谢谢 !

最佳答案

异步操作确实有开销。他们创建 future ,将监听器附加到这些 future ,安排微任务,异步完成 future 等。所有这些都不可避免地需要额外的时间和空间,而不是仅仅在堆栈上返回一个值,最重要的是,你也会得到更多的延迟,因为异步操作可能与其他操作交错。
一个异步函数,如

Future<int> foo(Future<int> bar()) async {
print("before");
var result = await bar();
print("after");
return result;
}
相当于一个函数,写成:
Future<int> foo(Future<int> bar()) {
var $c = Completer<int>();
print("before");
bar().then((int result) {
print("after");
$c.complete(result);
}, onError: (e, s) {
$c.completeError(e, s);
});
return $c.future;
}
编译器尝试制作类似的东西(但可能不如手工重写)。所有这些额外的 future 管理对于异步函数来说都是必要的开销。
这也是异步的优点:您可以在等待时做其他事情,fx,I/O 操作。即使有开销,一个正确编写的异步程序仍然可以比所有 I/O 操作都阻塞更快地完成。有时不是。
如果您的程序执行 I/O,那么除非它是一个非常专业的程序,否则 I/O 时间很可能会支配其他一切

关于performance - Dart - 异步与同步性能注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63915286/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com