gpt4 book ai didi

swift - 为什么在导入模块中使用函数时 Swift 多线程效率要低得多?

转载 作者:行者123 更新时间:2023-11-30 10:50:55 24 4
gpt4 key购买 nike

我将在这里省略很多“不相关”的细节,以帮助人们专注于实际问题。

我有一个 Swift 项目,其中涉及大量计算(数值积分和多参数最佳拟合等)。为了加快速度,我的目标是使用并发处理。

使用 XCTest 类,我发现当我的闭包调用模块中定义的函数时,如果我使用 DispatchQueue.concurrentPerform 进行单次迭代,则需要时间 t。当重复 5 次迭代时,它的运行速度大约慢 5%(我对此很满意)。

注意该函数是结构体上的静态函数(我的微积分例程集合)。

但是,如果我将函数放在单独的模块中并导入它,则重复测试 1 次迭代需要相似的时间 t。但现在当我尝试 5 次迭代时,调用时间增加了一倍(实际上慢了 105%)。

Swift 版本:4.2.1操作系统:macOS 10.14.3Xcode 10.1处理器:6核Core i7(Mac mini 2018)

除了函数引用之外,所有“对象”都是到处使用的结构和值类型。

再次快速总结:使用DispatchQueue.concurrentPerform(),与同模块定义函数的1次迭代的基线时间相比,5次迭代是慢 5%。然而,当使用导入模块中定义的函数执行相同的过程时,1次迭代的基线时间保持不变,但5次迭代慢了105%

任何人都可以解释为什么会发生这种情况,并希望提出一种避免这种减速同时将我的集合保留在可导入模块中的方法吗?

如果您需要更多信息,请随时提问。

最佳答案

问题已解决。不知道原因是什么。

删除了我的项目,创建了一个新项目,将文件导入回其中,并将其包含在工作区中。

现在,5 个并发线程的处理时间仅比单个线程长 10%(工作量是原来的 5 倍)。仍然很想知道是什么原因导致了这个问题,如果效率下降只有 5%(如前面提到的情况那样),那就太好了。

但是对于仅仅从开始一个新项目开始的这种改进,我不会狡辩!

关于swift - 为什么在导入模块中使用函数时 Swift 多线程效率要低得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550174/

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