有没有一种方法可以创建自定义的DispatchQueue服务质量,并具有它自己的自定义"速度"?例如,我想要一个速度是.utility的两倍的服务质量.

Ideas on how to solve it

  • 以某种方式告诉CPU/GPU,我们希望每X个操作周期运行一次任务?我不确定iOS是否可以直接做到这一点.
  • 这是一个非常糟糕的黑客攻击,会产生混乱的代码,如果一行代码运行几秒钟,并不能真正解决问题,但我们可以在每行代码之后引入等待.
  • 在SpriteKit/SceneKit中,可以减慢时间.有没有办法以某种方式利用这一点来降低任意一段代码的速度?
  • 每X秒阻止一次线程,使其变慢-不确定是否可能在不牺牲应用程序速度的情况下

推荐答案

在iOS或任何其他Cocoa平台中,没有任何机制来控制工作项目的"速度"(该词的任何含义).为我们提供的唯一工具是对日程安排的一些控制.一旦您的工作项被安排好,它将获得100%(*)的CPU核心,直到它结束或被抢占.没有办法被要求更频繁地被抢占(允许这样做将是昂贵的,因为上下文切换是昂贵的).

管理完成了多少工作的方法是直接管理工作,而不是抢占.最好的方法是将工作分成几个小部分,然后随着时间的推移安排它们,并在最后将它们组合在一起.如果您的算法不支持这种输入分段,那么算法的主"循环"需要限制它执行的迭代次数(或它花费在迭代上的时间量),并在该点返回以供稍后调度.

如果你不能控制算法代码,你不能和任何人一起工作,你不能把你的数据分割成更小的片段,这可能是一个无法解决的问题.

(*)随着"性能"核心的崛起和其他类似的CPU进步,这不是完全正确的,但对于这个问题来说,它已经足够接近了.

Swift相关问答推荐

";async let和";async之间的差异让我们等待";

如何设置两个不同的视图模型以在我的SwiftUI应用程序中使用相同的数据源?

关闭 SwiftUI TabView 中的子视图

找出touch 点的屏幕亮度

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

减小SF符号的边框宽度

如何制作一个在 SceneKit 中投射阴影的透明物体?

Swift Combine:如何在保留发布者结果顺序的同时进行收集?

MainActor 隔离可变存储属性为何会出现可发送错误?

Swiftui 按钮依次显示一组图像

SwiftUI 分段 Select 器的问题

在 SwiftUI 中的 ForEach 中使用 id 时如何为数组设置动画索引

将内容与工作表顶部而不是中间对齐

RxSwift:share() 替代方案,保证upstream 的单一订阅

Swift:连接两个数组而不重复共享后缀/前缀

swift中的SequenceType和CollectionType有什么区别?

在swift 3中将文件保存在文档目录中?

如何删除桥头而不出错?

如何从元组数组创建字典?

如何从 Swift 中的字符串生成条形码?