我正在研究一些AR游戏,其中包含三个主要模块:
app的例程非常简单:
每个模块都有自己的工作线程(或调度队列),但只有一个模块是活动的,因为它们是串行工作的。
问题是当应用程序在一些低级设备(如iPhone6)上运行时,fps是不稳定的。在分析之后,我发现有时两个cpu内核都被一些系统进程占用(比如medieserverd,backboardd .)而且我的工作线程可能会被抢占很长时间(比如10 my甚至更长)。
有没有办法确保我的工作线程能够占用至少一个cpu核心?
现在我使用分派队列来组织我的工作任务。直接使用NSThread会更好吗?
发布于 2019-06-09 11:22:54
有没有办法确保我的工作线程能够占用至少一个cpu核心?
通常情况下,内核可能总是决定抢占线程。但是,您可以指出线程的重要性,以减少发生这种情况的可能性。
我使用分派队列来组织我的工作任务。
尝试增加队列的优先级,例如:
dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
有关设置队列优先级这里的详细信息。
直接使用NSThread会更好吗?
NSThread有更多的方法来调整优先级,所以是的,这可能会带来更好的结果。
如果切换到NSThread,就可以设置它的qualityOfService和threadPriority。
这应该足够给您的线程更多的CPU时间。如果没有,您可以尝试底层API直接调整马赫线程调度。
https://stackoverflow.com/questions/56513310
复制相似问题