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