何时应该异步使用方法的合适的挂钟时间阈值?

时间:2018-07-25 09:11:52

标签: swift multithreading performance asynchronous execution-time

我相信这个问题与编程语言无关,但是作为参考,我对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)是否足够快?

我希望您不要认为这是一个愚蠢的问题,我真的很感兴趣。

是否有与此相关的标准参考?一些最佳做法?

0 个答案:

没有答案