gpt4 book ai didi

performance - Await在测试用例中是否有开销

转载 作者:行者123 更新时间:2023-11-28 21:09:17 25 4
gpt4 key购买 nike

我有一个非常简单的测试用例(scalatest,但没关系),我提供了两个访问某些资源的实现,这个方法返回 Try 或一些案例类实例。

测试用例:

"ResourceLoader" must
"successfully initialize resource" in {
/async code test
noException should be thrownBy Await.result(ResourceLoader.initializeRemoteResourceAsync(credentials, networkConfig), Duration.Inf)
}

"ResourceLoader" must
"successfully sync initialize remote resources" in {
noException should be thrownBy ResourceLoader.initializeRemoteResource(credentials, networkConfig)
}

这测试测试访问一些远程资源的不同代码

同步版本

def initializeRemoteResource(credentials: Credentials, absolutePathToNetworkConfig: String): Resource = {
//some code accessing remote server
}

异步版本

def initializeRemoteResourceAsync(credentials: Credentials, absolutePathToNetworkConfig: String): Future[Try[Resource]] = {
Future {
//the same code as in sync version
}
}

在 IDEA 测试选项卡中,我看到基于 future 的版本比同步版本慢两倍,我的问题是显式调用 Await.result 有开销吗?如果不是,为什么它会减慢执行速度?感谢任何帮助,谢谢。

注意:我知道这不是衡量生产系统性能的最佳方式。但它在列表中表示在每个测试用例上花费了多少时间。

最佳答案

是的,Await.result 会有少量开销,但在实践中可能不会太多。 Future {} 需要隐式范围内的 ExecutionContext(线程池或线程创建者),因此如果不导入默认执行上下文(它只会生成一个线程)或其他一些上下文,您将无法成功使用它。例如,如果您使用默认执行上下文,您将有两个线程而不是一个线程,这将涉及上下文切换的一些开销。不过应该不多。如果“慢两倍”意味着 40 毫秒而不是 20 毫秒,那么也许不值得担心。

关于performance - Await在测试用例中是否有开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980525/

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