「Jank」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
4行目: 4行目:
 
一般的に[[ドローコール]]は[[メインスレッド]]([[UIスレッド]]とも呼ばれる)でしか実行できない。これは[[Windows]]でも[[macOS]]でも[[iOS]]でも[[Android]]でも[[.NET]]でも[[Java]]でも同じだ。
 
一般的に[[ドローコール]]は[[メインスレッド]]([[UIスレッド]]とも呼ばれる)でしか実行できない。これは[[Windows]]でも[[macOS]]でも[[iOS]]でも[[Android]]でも[[.NET]]でも[[Java]]でも同じだ。
  
たとえば8コア(8スレッド)の[[ハードウェア]]であっても[[メインスレッド]]は常にひとつしかない。このためメインスレッドに強烈な高負荷がかかると処理の糞詰まりを引き起こし、[[ドローコール]]がいつまで経っても呼ばれず、[[GPU]]はスカスカなのに仕事がこないため、結果として画面が更新されずガクガクになる。
+
たとえば8コア(8スレッド)の[[ハードウェア]]であっても[[メインスレッド]]は常にひとつしかない。このためメインスレッドに強烈な高負荷がかかると「処理の糞詰まり」を引き起こし、[[ドローコール]]がいつまで経っても呼ばれず、[[GPU]]はスカスカなのに仕事がこないため、結果として画面が更新されずガクガクになる。
  
 
ジャンクは主にシングルスレッド性能が低く、コア数の多さで性能を盛ってる[[スマートフォン]]の[[CPU]]([[SoC]])で好発する。ジャンクは[[Android]]がガクガクになる主たる原因である。[[iOS]]ではジャンクが発生する[[アプリ]]の作りだと[[AppStore]]の審査で蹴られるのであまり問題になることはない。
 
ジャンクは主にシングルスレッド性能が低く、コア数の多さで性能を盛ってる[[スマートフォン]]の[[CPU]]([[SoC]])で好発する。ジャンクは[[Android]]がガクガクになる主たる原因である。[[iOS]]ではジャンクが発生する[[アプリ]]の作りだと[[AppStore]]の審査で蹴られるのであまり問題になることはない。

2021年11月17日 (水) 04:47時点における版

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

概要

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

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

ジャンクは主にシングルスレッド性能が低く、コア数の多さで性能を盛ってるスマートフォンCPUSoC)で好発する。ジャンクはAndroidがガクガクになる主たる原因である。iOSではジャンクが発生するアプリの作りだとAppStoreの審査で蹴られるのであまり問題になることはない。

回避策

非同期化

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

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

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

ジャンクリデューサー

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