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