GCD支持根据4个全局优先级队列(高,默认,低,背景)将块调度到队列。 我的应用程序中有几个NSOperationQueues但想要以不同的优先级运行每个。据我所知,NSOperationQueue是对GCD的抽象,并且希望为NSOperationQueue设置不同的优先级(类似于GCD优先级队列)。有办法吗? (发现可以为操作设置优先级,但不能为队列本身设置优先级。)
答案 0 :(得分:5)
从iOS 8开始,NSOperationQueue具有qualityOfService
属性,这就是我认为OP的含义。来自Class Reference:
此属性指定应用于操作对象的服务级别 添加到队列中。如果操作对象具有显式服务 级别设置,而是使用该值。 [...]
服务级别会影响操作对象的优先级 允许访问系统资源,如CPU时间,网络资源, 磁盘资源等。具有更高服务质量的运营 级别优先于系统资源,以便它们 可以更快地完成他们的任务。您使用服务级别来确保 给出了响应显式用户请求的操作 优先于不太重要的工作。
同样在iOS 8中,您可以更改与underlyingQueue
属性一起使用的GCD队列,从而选择具有所需优先级的全局GCD队列。
答案 1 :(得分:1)
来自NSOperationQueue Class Reference的引用。
队列中的操作(但尚未执行)本身就是 根据优先级和互操作对象组织 依赖关系并相应地执行。
操作间依赖关系提供绝对执行顺序 操作,即使这些操作位于不同的位置 操作队列。操作对象不被认为是准备好的 执行直到其所有相关操作都已完成执行。 对于准备执行的操作,操作队列始终 执行相对于另一个具有最高优先级的那个就绪 操作强>
这意味着在设计上,您无法为队列设置优先级,但NSOperationQueue将根据操作的个别优先级使用GCD全局队列进行单独操作。
答案 2 :(得分:-2)
尝试在您添加到队列的NSOperations上设置threadPriority
。