gpt4 book ai didi

ios - .enforceQoS 标志如何增加优先级?

转载 作者:行者123 更新时间:2023-11-28 05:35:52 26 4
gpt4 key购买 nike

我试图提高并发队列中执行的 block 的优先级。我建议标志 enforceQoS 适用于此目的。正如 Apple 文档所说:

This flag prioritizes the block's quality-of-service class over the one associated with the current execution context, as long as doing so does not lower the quality of service.

假设有一个队列:

/// Lowest priority queue
let concurrentQueue = DispatchQueue(label: "queue.conc.test", qos: .background, attributes: .concurrent)

我们还有几个DispatchWorkItem任务,其中一些是:

let item1 = DispatchWorkItem(qos: .userInitiated) { /* execute block */ }
let item2 = DispatchWorkItem(qos: .utility, flags: .enforceQoS) { /* execute block */ }

我的问题很简单:Apple 保证 item2 提前执行吗?

我在 Playground 上玩了一下,很遗憾没有表现出这个旗帜的任何优势,结果绝对是困惑的。官方文档在这件事上也没有帮助。

非常感谢。

最佳答案

这里的“优先”并不意味着“尽快运行”。这意味着“在决定为这个 block 分配哪个 QoS 时,更喜欢这里给你的那个,而不是当前执行上下文建议的那个(如果这里给定的那个高于这个 block 否则会收到的)。”

如果您要求 item2 在 item1 之前运行,则使用 notify 对其进行排序:

item2.notify(queue: concurrentQueue, execute: item1)

在任何情况下,您都不应尝试使用 QoS 来订购工作项。 QoS 是一个复杂的系统,不仅包括优先级;它还包括设备是否处于节能模式等内容。根据每个服务级别的描述,为项目分配符合其意图的 QoS。如果您要求事物按特定顺序运行,请使用依赖项(如 notify)来对它们进行排序。

关于ios - .enforceQoS 标志如何增加优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665809/

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