gpt4 book ai didi

ios - DispatchQueue - QOS 困惑

转载 作者:搜寻专家 更新时间:2023-11-01 06:35:53 30 4
gpt4 key购买 nike

请考虑以下声明:

DispatchQueue.global(qos: .userInitiated).asyncAfter(deadline: .now() + .milliseconds(500), qos: .utility, flags: .noQoS) {
print("What is my QOS?")
}

请注意有多少参数与服务质量有关。仅仅微乎其微的可能性如何解决这些排列?

最佳答案

通常,您不应该尝试整理出所有这些排列。在大多数情况下,过多地使用 QoS 会招来麻烦。但是有相当简单的规则。

队列有优先级,它们可以将该优先级分配给请求继承的 block 。

这个特定的 block 明确请求较低的优先级,但随后说“忽略我的 QoS 请求”。通常,不要那样做。我知道这样做的唯一原因是,如果您正在与一些不理解 QoS 的遗留 API 进行交互。 (我自己从未遇到过这种情况,很难想象它会出现在用户级代码中。)

IMO 的一个更有趣的问题(也是在实际代码中经常出现的问题)是这个:

DispatchQueue.global(qos: .utility).async(qos: .userInitiated) {}

这个 block 的优先级是什么?答案是.userInitiated, block 将把它的优先级“借”给队列,直到它执行完毕。所以在一段时间内,整个队列将变为 .userInitiated。这是为了防止优先级倒置(高优先级任务阻塞等待低优先级任务)。

这都在 Concurrent Programming With GCD in Swift 3 中进行了深入讨论。 ,这是任何对非平凡 GCD 感兴趣的人必看的。

关于ios - DispatchQueue - QOS 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41701148/

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