Unity는 기기의 CPU 토폴로지를 기반으로 스레드 선호도와 스레드 우선순위를 설정합니다. Unity의 기본 스레드 설정은 대부분 프로젝트에 적합하지만, 일부 상황에서는 스레드 설정을 변경해야 할 수 있습니다. (예를 들어 특정 기기에 최적화하려는 경우 또는 애플리케이션이 낮은 전력 소비를 목표로 하고 높은 프레임 속도를 요구하지 않는 경우 스레드 설정을 변경할 수 있습니다.)
중요: 가능하면 Unity의 기본 설정을 사용하십시오. 특정 기기에 최적화하도록 스레드 설정을 변경하면, 변경 사항은 다른 기기 또는 같은 기기라도 차후 다른 운영체제 버전에서는 성능에 부정적인 영향을 미칠 수 있습니다.
스레드의 선호도는 스레드를 실행할 CPU 코어를 제어합니다. Android 기기의 경우 일반적으로 두 가지 카테고리로 코어를 나눕니다.
중요: 다양한 Android 기기를 대상으로 하는 일반적인 애플리케이션의 경우 스레드를 특정 코어에 바인드하지 마십시오.
Unity는 일반적으로 기기의 운영체제로부터 모든 CPU 코어의 처리 능력과 빅/리틀 코어를 할당받습니다. 이전 버전의 운영체제인 경우 이 정보를 항상 사용할 수는 없습니다. 이 경우 Unity는 CPU 코어의 처리 능력을 계산하고 해당 정보를 사용하여 빅 코어나 리틀 코어에 할당합니다. 코어를 할당하기 위해 Unity는 각 코어의 CPU 처리 능력을 임계값과 비교합니다. 기본적으로 가장 느린 코어의 CPU 처리 능력의 두 배 이상인 코어는 빅 코어이고, 그렇지 않은 경우에는 리틀 코어입니다.
Unity가 크거나 작게 할당하는 코어를 보다 잘 제어하기 위해 커스텀 임계값을 제공할 수 있습니다.커스텀 임계값을 제공하려면 -platform-android-cpucapacity-threshold [value]
커맨드 라인 인자를 0과 1024 사이의 값과 함께 사용하십시오. 여기서 0은 최저 처리 능력의 코어를, 1024는 최고 처리 능력의 코어를 의미합니다.예를 들어, 1024의 약 85%인 ’870’이라는 값은 CPU의 처리 능력이 칩의 상위 15%에 속하는 경우 코어가 크다는 것을 의미합니다.Android 기기에서 Unity에 시작 커맨드 라인 인자를 추가하는 방법에 대한 자세한 내용은 커스텀 UnityPlayerActivity 파일의 Unity 시작 인자 지정을 참조하십시오.
참고: Unity는 항상 코어를 빅 코어 또는 리틀 코어로 분류합니다. 일부 복잡한 CPU 토폴로지(예를 들어, 중간 코어가 있는 토폴로지)의 경우에도 Unity는 코어를 빅 코어 또는 리틀 코어로 분류합니다.
Unity는 스레드 선호도 값으로 사용할 수 있는 다음과 같은 별칭을 제공합니다.
any
: 모든 코어에서 스레드를 실행할 수 있습니다.little
: 리틀 코어에서 스레드를 실행할 수 있습니다.big
: 빅 코어에서 스레드를 실행할 수 있습니다.16진수 및 바이너리 값을 사용하여 스레드 선호도를 지정할 수도 있습니다. 바이너리에서 비트 인덱스는 특정 CPU 코어를 참조합니다. 일반적으로 리틀 코어는 인덱스 0에서 시작하고 빅 코어는 리틀 코어에 바로 이어서 옵니다.
예를 들어 4개의 리틀 코어와 4개의 빅 코어가 포함된 CPU가 있습니다.
0b11110000
과 16진수 값 0xf0
을 사용하면 빅 코어에서 스레드를 실행할 수 있습니다.0b1111
과 16진수 값 0xf
를 사용하면 리틀 코어에서 스레드를 실행할 수 있습니다.스레드의 우선순위는 기기의 운영체제가 CPU를 할당하는 방법을 제어합니다. 운영체제는 우선순위가 낮은 스레드에 비해 우선순위가 높은 스레드에 더 많은 CPU 시간을 할당합니다.
Unity에서 사용할 수 있는 스레드 우선순위 값은 –20에서 19 사이입니다. 여기서 –20은 가장 높은 우선순위를 나타내고 19는 가장 낮은 우선순위를 나타냅니다.
이 섹션은 설정할 수 있는 Unity 스레드와 이를 설정하는 데 사용하는 커맨드 라인 인자에 대한 정보를 포함하고 있습니다.
Android 기기에서 Unity에 시작 커맨드 라인 인자를 추가하는 방법에 대한 자세한 내용은 커스텀 UnityPlayerActivity 파일의 Unity 시작 인자 지정을 참조하십시오.
중요:일부 기기 및 Android OS 버전에서는 Android OS가 커맨드 라인 파라미터를 무시하고 오류를 발생시킬 수 있습니다.이 경우 애플리케이션은 문제 없이 정상적으로 실행되지만 Android에서는 지정한 스레드 선호도 또는 스레드 우선 순위 설정이 적용되지 않습니다.
Unity의 메인 스레드는 모든 스크립트를 실행하며 일반적으로 CPU 부하가 높습니다. 이 스레드에 영향을 주는 커맨드 라인 인자는 다음과 같습니다.
-platform-android-unitymain-priority [value]
여기서 [value]
는 스레드의 우선순위입니다.-platform-android-unitymain-affinity [value]
여기서 [value]
는 스레드의 선호도입니다.Unity의 워커 스레드는 C# 잡 시스템을 통해 코어 엔진과 애플리케이션 디스패치의 잡을 모두 실행합니다. 이러한 스레드에 영향을 주는 커맨드 라인 인자는 다음과 같습니다.
-platform-android-jobworker-priority [value]
여기서 [value]
는 스레드의 우선순위입니다.-platform-android-jobworker-affinity [value] [value1 value2 value3]
여기서 [value]
는 스레드의 선호도이고 [value1 value2 value3]
은 선택적 값입니다. 스레드당 워커 스레드의 선호도를 지정하는 데 사용할 수 있습니다. 단일 값만 설정하면 Unity는 모든 워커 스레드에 동일한 값을 사용합니다. ’-job-worker-count’를 사용하여 워커 스레드 수를 지정할 수 있습니다.Unity의 렌더 스레드는 프로젝트에서 멀티스레드 렌더링을 사용하는 경우 그래픽스 API와 상호작용합니다.
-platform-android-gfxdeviceworker-priority [value]
여기서 [value]
는 스레드의 우선순위입니다.-platform-android-gfxdeviceworker-affinity [value]
여기서 [value]
는 스레드의 선호도입니다.참고: GraphicsJobs를 사용하는 경우 JobWorker 스레드도 그래픽스 API와 상호 작용합니다.