NSOperationQueue vs NSThread Priority - 控制NSOperationQueue中消耗的CPU数量

时间:2011-09-09 14:13:56

标签: objective-c nsthread nsoperationqueue preloading

我有一些纹理和声音效果预加载我需要异步进行,以便在我正在开发的iOS游戏中创建流畅的用户体验。

我试图在NSOperationQueue和NSThread之间决定在游戏过程中加载这些游戏资源。

NSOperationQueue似乎是一个明显的赢家并且有很多好处,但是我担心对这个“后台”资源加载任务进行有效的优先级控制,以便我可以根据它消耗的周期数来调低它不影响帧率。

我看到NSOperationQueue有一个'priority'的概念,但它看起来与NSThread的'priority'概念不同。如果我错了,请纠正我,但NSThread的优先级与系统上运行的其他线程有关,而NSOperation的优先级是该任务相对于其他排队任务的优先级。

我想知道的是......

有没有办法控制给定NSOperationQueue任务的优先级,与当前在设备上运行的其他线程相比,它可以消耗多少个周期(相对于相对优先级与其他排队任务相对)?

在NSOperationQueue的任务中改变当前线程的优先级是否安全? (使用NSThread的+ setPriority)

1 个答案:

答案 0 :(得分:4)

NSOperation的一个实例也有一个'setThreadPriority:'方法,以及'setQueuePriority:'。

这绝对是您正在寻找的。

- (void)setThreadPriority:(double)priority
  

您指定的值将映射到操作系统的优先级值。仅当操作的main方法正在执行时,指定的线程优先级才应用于线程。在操作的完成块执行时不应用它。对于您在其中创建自己的线程的并发操作,您必须在自定义启动方法中自己设置线程优先级,并在操作完成时重置原始优先级。