我相信这个问题与编程语言无关,但是作为参考,我对Swift最感兴趣。
当我们在方法内部执行毕达哥拉斯计算时,我们知道对于32位或64位Int
,这将是一个快速的操作。
func calculatePythagoras(sideX x: Int, sideY y: Int) -> Int {
return sqrt(x*x+y*y)
}
由于我们认为它足够快,因此可以同步调用此方法。
当然,假设Int
的最大64位大小以异步方式实现是很愚蠢的:
func calculatePythagorasAsync(sideX x: Int, sideY y: Int, done: (Int) -> Void) -> Void {
DispatchQueue.global(qos: .userInitiated).async {
let sideZ = sqrt(x*x+y*y)
DispatchQueue.main.async {
done(sideZ)
}
}
}
这只是使代码过于复杂,因为我们可以假设不考虑正在运行的设备的运行年龄和运行速度,执行两次乘法和最大大小为64的整数的平方根,这将足够快地执行。 / strong>
这就是我感兴趣的,足够快是什么?假设为简单起见,我们将讨论限制在一个特定的设备D
上。假设在设备D
上计算毕达哥拉斯的执行时间(挂钟时间)为1微秒。
您认为应该将方法M
更改为异步的合理阈值是什么?想象一下,我们每次显示表视图(列表视图)单元格(项目)时都想调用此方法M
,并在主线程上调用M
。并且我们希望在滚动时保持60 fps的流畅度。 1微秒肯定足够快。当然,100,000微秒(= 0.1秒)还不够快。大约10,000微秒(= 0.01 s)也不够快。
1,000微秒(= 1毫秒= 0.001 s)是否足够快?
我希望您不要认为这是一个愚蠢的问题,我真的很感兴趣。
是否有与此相关的标准参考?一些最佳做法?