Unity настраивает сопоставление потоков и приоритет потоков на основе топологии ЦП устройства. Конфигурация потока Unity по умолчанию хорошо работает для большинства проектов, но в некоторых ситуациях вам может понадобиться изменить конфигурацию потока (например, если вы хотите оптимизировать для определенных устройств или если ваше приложение нацелено на низкое энергопотребление и не требует высокая частота кадров).
Важно. По возможности используйте настройки Unity по умолчанию. Если вы измените конфигурацию потоков, чтобы оптимизировать ее для определенных устройств, любые внесенные вами изменения могут отрицательно сказаться на производительности других устройств или даже тех же устройств в будущих версиях операционной системы.
Сходство потоков
Сходство потока определяет, на каких ядрах ЦП должен выполняться поток. Для устройств Android ядра обычно делятся на две категории:
- Большой: мощные ядра, потребляющие много энергии.
- Маленькие: более медленные ядра, потребляющие меньше энергии от батареи, чем большие ядра.
Важно. Для обычных приложений, предназначенных для различных устройств Android, не привязывайте потоки к конкретным ядрам.
Определение ядер ЦП
Unity обычно получает информацию о мощности и назначении больших/малых размеров для каждого ядра ЦП от операционной системы устройства. Для более старых версий операционной системы эта информация не всегда доступна. В этом случае Unity вычисляет мощность ядер ЦП и использует эту информацию, чтобы назначить каждому ядру большое или маленькое значение. Чтобы назначить ядро, Unity сравнивает мощность ЦП каждого ядра с пороговым значением. По умолчанию ядро считается большим, если его мощность ЦП как минимум в два раза больше, чем у самого медленного ядра, и малым в противном случае.
Для большего контроля над тем, какие ядра Unity назначает большими или маленькими, вы можете указать настраиваемый порог. Чтобы указать настраиваемый порог, используйте аргумент командной строки -platform-android-cpucapacity-threshold [value]
со значением от 0 до 1024, где 0 представляет наименьшую производительность ядра, а 1024 представляет ядро с максимальной емкостью. Например, значение 870
, что составляет примерно 85 % от 1024, означает, что ядро является большим, если его мощность ЦП входит в число 15 % лучших процессоров процессора. Информацию о том, как добавить аргументы командной строки запуска в Unity на устройствах Android, см. в разделе Указание аргументов запуска Unity из пользовательского файла UnityPlayerActivity.
Примечание. Unity всегда классифицирует ядро как большое или маленькое. Для некоторых сложных топологий ЦП (например, со средними ядрами) Unity по-прежнему классифицирует свои ядра как большие или маленькие.
Псевдонимы сходства потоков
Unity предоставляет следующие псевдонимы, которые можно использовать в качестве значения сходства потоков:
any
: позволяет потоку работать на любом ядре.little
: позволяет потоку работать на любом маленьком ядре.big
: позволяет потоку работать на любом большом ядре.
Вы также можете использовать шестнадцатеричные и двоичные значения для указания сходства потоков. В двоичном формате индекс бита ссылается на конкретное ядро ЦП. Как правило, маленькие ядра начинаются с индекса 0, а большие ядра идут сразу после них.
Например, если ЦП содержит четыре маленьких ядра и четыре больших ядра:
- Двоичное значение
0b11110000
и шестнадцатеричное значение0xf0
позволяют потоку работать на больших ядрах. - Двоичное значение
0b1111
и шестнадцатеричное значение0xf
позволяют потоку работать на небольших ядрах.
Приоритет потока
Приоритет потока определяет, как операционная система устройства выделяет процессорное время потоку. Операционная система выделяет больше процессорного времени потокам с более высоким приоритетом по сравнению с потоками с более низким приоритетом.
Значения приоритета потока, которые вы можете использовать в Unity, находятся в диапазоне от –20 до 19, где –20 указывает на самый высокий приоритет, а 19 – на самый низкий приоритет.
Настраиваемые потоки Unity
В этом разделе содержится информация о потоках Unity, которые вы можете настроить, и какие аргументы командной строки вы используете для их настройки.
Информацию о том, как добавить аргументы командной строки запуска в Unity на устройствах Android, см. в разделе Указание аргументов запуска Unity из пользовательского файла UnityPlayerActivity.
Основной поток Unity
Основной поток Unity выполняет все скриптыфрагмент кода, позволяющий создавать собственные компоненты, запускать игровые события, изменять Свойства компонента с течением времени и реагировать на ввод пользователя любым удобным для вас способом. Подробнее
См. в Словарь и обычно имеет высокую нагрузку на ЦП. Аргументы командной строки, влияющие на этот поток:
-platform-android-unitymain-priority [значение]
, где[значение]
— это приоритет потока.-platform-android-unitymain-affinity [value]
, где[value]
– это родство потока.
Потоки Unity JobWorker
Рабочие потоки Unity выполняют задания как из ядра ядра, так и из того, что ваше приложение отправляет через систему заданий C#. Аргументы командной строки, влияющие на эти потоки:
-platform-android-jobworker-priority [значение]
, где[значение]
— это приоритет потоков.-platform-android-jobworker-affinity [value] [value1 value2 value3]
, где[value]
— это родство потока и[value1 value2 value3]
— необязательные значения, которые можно использовать для указания сходства рабочих потоков на нить. Если вы установите только одно значение, Unity использует одно и то же значение для всех рабочих потоков. Вы можете использовать «-job-worker-count», чтобы указать количество рабочих потоков.
Поток рендеринга Unity
Поток рендеринга Unity взаимодействует с Graphics API, если в вашем проекте используется многопоточный рендеринг.
-platform-android-gfxdeviceworker-priority [значение]
, где[значение]
— это приоритет потока.-platform-android-gfxdeviceworker-affinity [value]
, где[value]
– это родство потока.
Примечание. Если вы используете GraphicsJobs, потоки JobWorker также взаимодействуют с Graphics API.