Jank

提供: MonoBook
ナビゲーションに移動 検索に移動

Jank(読み:じゃんく)とは、メインスレッドに高負荷がかかり、ユーザーインターフェースがガクガクまたはフリーズしたかのような状態になることを言います。

概要

一般的にドローコールメインスレッドUIスレッドとも呼ばれる)でしか実行できない。これはWindowsでもmacOSでもiOSでもAndroidでも.NETでもJavaでも同じです。

たとえば8コア(8スレッド)のハードウェアであってもメインスレッドは常にひとつしかありません。このためメインスレッドに強烈な高負荷がかかると「処理待ちの大渋滞」を引き起こし、ドローコールがいつまで経っても呼ばれず、GPUはスカスカなのに仕事がこないため、結果として画面が更新されずガクガクになります。

ジャンクは主にシングルスレッド性能が低く、コア数の多さで性能を盛ってるコンピューター、身近なところではスマートフォンCPUSoC)で発生しやすい傾向があります。とくに高効率コアと高性能コアを組み合わせたCPUでは低性能な高効率コアにメインスレッドが置かれることでジャンクが頻発し、高性能コアやGPUがスカスカになるなどといった現象が起きることも多々あります。最近のAndroidでもガクガクになる原因はほとんどがこれです。iOSではジャンクが発生するアプリの作りだとAppStoreの審査で蹴られるのであまり問題になることはありません。

回避策

非同期化

頑張って、可能な限り、「非同期処理」を使いまくりプログラムを実装してください。 これによりメインスレッドの負荷が激減します。

ただしマルチスレッド非同期処理に精通していないプログラマーに実装させるとバグだらけになる諸刃の剣である点には注意する必要があります。

また、第三者の作ったバックグラウンドアプリが高負荷をかけてくるような状況ではどうにもなりません。 Androidであればプリインストールアプリなんかが大きなお世話をしてきて悪さをする場合も結構あります。

ジャンクリデューサー

このジャンク問題を軽減すべく、最近のSnapdragonの一部製品(型番の末尾に「G」が付く製品。Snapdragon 765Gなど)には「Jank Reducer」なる機能が搭載されています。GPUが一定のフレームレートを下回ったら「仕事がこねえ」「ジャンク発生したな」と判断し勝手にドローする機能のようです。詳細は不明。