针对CoreMotion的NSThread,NSOperation或GCD以及准确的计时目的?

时间:2012-01-24 14:44:01

标签: ios multithreading performance timing core-motion

我希望在iPhone 4+上进行一些高精度的核心运动读取(如果可能的话,> = 100Hz)和运动分析,这将在应用程序的主要部分持续运行。运动响应和分析代码发出的信号必须尽可能没有滞后。

我最初的计划是根据此处引用的节拍器项目中的代码启动专用NSThread:Accurate timing in iOS,以及用于链接和使用线程的运动分析器协议。我想知道GCD或NSOperation队列是否会更好?

我在大量阅读之后的印象是,它们的设计目的是处理大量离散的一次性操作,而不是定期执行一次又一次的少量操作,并且每隔一毫秒使用它们可能会无意中创建大量的线程创建/破坏开销。有人有这方面的经验吗?

我也想知道线程中无限循环的性能影响(例如在上面链接的代码中)。有没有人更多地了解线程如何工作?我知道iPhone4(及以下)是单核处理器,并使用某种智能多任务处理(先发制人?),它根据各种时序和I / O需求切换线程,以创建并行效果......

如果你的线程有一个简单的“while”循环无休止地运行,但每毫秒左右只做一次额外的工作,那么处理器的切换算法是否会认为无限循环对资源的“高要求”,从而使它们从其他地方占用线程还是足够聪明,在额外的代码执行之间的“停机时间”中更多地将资源分配给其他线程?

提前感谢您的帮助和专业知识......

1 个答案:

答案 0 :(得分:0)

IMO的瓶颈是传感器。实际更新频率通常不等于您指定的频率。请参阅update frequency set for deviceMotionUpdateInterval it's the actual frequency?Actual frequency of device motion updates lower than expected, but scales up with setting

前段时间我使用Core Motion和原始传感器数据进行了几次测量。我也需要很高的更新速率,因为我正在进行Simpson集成,因此需要尽量减少错误。事实证明,实际频率总是较低,并且有大约80 Hz的限制。这是一部运行iOS 4的iPhone 4.但是只要您在大多数情况下不需要将其用于科学目的,60-70赫兹就可以满足您的需求。