首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保护我的工作线程不被系统进程抢占?

如何保护我的工作线程不被系统进程抢占?
EN

Stack Overflow用户
提问于 2019-06-09 09:04:49
回答 1查看 1.4K关注 0票数 0

我正在研究一些AR游戏,其中包含三个主要模块:

  • 一种捕获视频帧数据的AVCaptureSession
  • 算法模块
  • 渲染引擎

app的例程非常简单:

  • 从AVCaptureVideoDataOutput中获取一帧数据,然后将其传递给算法模块。
  • 算法模块在自己的调度队列中处理帧数据,然后将结果传递给引擎。
  • 渲染引擎使用结果来更新整个虚拟场景。

每个模块都有自己的工作线程(或调度队列),但只有一个模块是活动的,因为它们是串行工作的。

问题是当应用程序在一些低级设备(如iPhone6)上运行时,fps是不稳定的。在分析之后,我发现有时两个cpu内核都被一些系统进程占用(比如medieserverd,backboardd .)而且我的工作线程可能会被抢占很长时间(比如10 my甚至更长)。

有没有办法确保我的工作线程能够占用至少一个cpu核心?

现在我使用分派队列来组织我的工作任务。直接使用NSThread会更好吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-09 11:22:54

有没有办法确保我的工作线程能够占用至少一个cpu核心?

通常情况下,内核可能总是决定抢占线程。但是,您可以指出线程的重要性,以减少发生这种情况的可能性。

我使用分派队列来组织我的工作任务。

尝试增加队列的优先级,例如:

dispatch_set_target_queue(myQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));

有关设置队列优先级这里的详细信息。

直接使用NSThread会更好吗?

NSThread有更多的方法来调整优先级,所以是的,这可能会带来更好的结果。

如果切换到NSThread,就可以设置它的qualityOfServicethreadPriority

这应该足够给您的线程更多的CPU时间。如果没有,您可以尝试底层API直接调整马赫线程调度

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56513310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档