Thread Priorities
Android では UI thread に高いプライオリティが割り振られているという。それは Systrace を睨めばわかるが、ふと思い立って実際にどのくらいなのか調べてみた。この SO の記事を真似してよく知っているアプリすなわち仕事アプリのスレッドを眺めてみる。
- UI Thread と Render Thread は同じくらい高い pri がある: 29
- HwBinder のスレッドは更に高い: 31
- ランダムなワーカーの皆様は 19
- Thread#setPriority で釣り上げを試みたと思しき奴らは 21. つまり Java の API をいじっている範囲では UI Thread には勝てない。setpriority() とか使うと変えられるのだろうか。常識的に考えるとダメそうだが。
- ART の GC 用スレッドは低め: 15
最終的に UI thread をブロックする処理は下手に worker に逃がすより UI thread でやってしまったほうが良い場合があるとわかる。まあ CPU は1個だけじゃないし他プロセスとの兼ね合いもあるので一概には言えないけれど。
ps の出力には PRI の他に NICE もあるが、上下関係は PRI に準じている。違いが気になるけど調べるのはまた今度。