Pebble's Diary

プログラマーの作業メモ

iOS/OSXにおけるスレッド優先順位

iOS/OSXではスレッドスケジューラーの出来が良く、細かい設定が可能である。 例として、CoreAudioでのコールバックスレッドのスレッドポリシーがどうなっているかみてみる。

standard policy_count 0 get_default 1
importance 32 count 1 get_default 0
timeshare 1 policy_count 1 get_default 1
period 10666666 computation 100000 constraint 10666666 preemptible 1 policy_count 4 get_default 0
inNumberFrames 471

471/44100 = 10.6ms
period 10.6ms
computation 0.1ms
constraint 10.6ms

  • iOS 9.3 MacMini2

standard policy_count 0 get_default 1
importance 0 count 1 get_default 0
timeshare 1 policy_count 1 get_default 1
period 2229115 computation 12000 constraint 2229115 preemptible 1 policy_count 4 get_default 0
inNumberFrames 1024

1024/44100 = 0.023ms
period 22ms
computation 0.12ms
constraint 22ms

OSX/iOSともに、THREAD_TIME_CONSTRAINT_POLICYによってバッファサイズの数値に合わせた値が設定されている。 さらに、OSXではimportanceに32が設定されており、少し上げてあるようである。 一方、iOSのimportanceは0となっている。

詳しくはAppleのドキュメントに解説がある。 Mach Scheduling and Thread Interfaces

さらに詳しく知りたい方は、この書籍が参考になる。

https://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542