Jank
Jank(読み:じゃんく)とは、メインスレッドに高負荷がかかり、ユーザーインターフェースがガクガクまたはフリーズしたかのような状態になることである。
概要[編集 | ソースを編集]
一般的にドローコールはメインスレッド(UIスレッドとも呼ばれる)でしか実行できない。これはWindowsでもmacOSでもiOSでもAndroidでも.NETでもJavaでも同じだ。
たとえば8コア(8スレッド)のハードウェアであってもメインスレッドは常にひとつしかない。このためメインスレッドに強烈な高負荷がかかると「処理の糞詰まり」を引き起こし、ドローコールがいつまで経っても呼ばれず、GPUはスカスカなのに仕事がこないため、結果として画面が更新されずガクガクになる。
ジャンクは主にシングルスレッド性能が低く、コア数の多さで性能を盛ってるスマートフォンのCPU(SoC)で好発する。ジャンクはAndroidがガクガクになる主たる原因である。iOSではジャンクが発生するアプリの作りだとAppStoreの審査で蹴られるのであまり問題になることはない。
回避策[編集 | ソースを編集]
非同期化[編集 | ソースを編集]
頑張って、可能な限り、「非同期処理」を使いまくりプログラムを実装する。 これによりメインスレッドの負荷が激減する。
ただマルチスレッドや非同期処理に精通していないプログラマーに実装させるとバグだらけになる諸刃の剣である。
また、第三者の作ったバックグラウンドアプリが高負荷をかけてくるような状況ではどうにもならない。 Androidであればプリインストールアプリなんかが大きなお世話をしてきて悪さをする場合も結構ある。
ジャンクリデューサー[編集 | ソースを編集]
このジャンク問題を軽減すべく、最近のSnapdragonの一部製品(型番の末尾に「G」が付く製品。Snapdragon 765Gなど)には「Jank Reducer」なる機能が搭載されている。GPUが一定のフレームレートを下回ったら「仕事がこねえ」「ジャンク発生したな」と判断し勝手にドローする機能のようだ。詳細は不明。