Version: 2023.2
언어: 한국어
듀얼 스레드 할당자
스레드세이프 리니어 할당자

TLS(스레드 로컬 스토리지) 스택 할당자

각 스레드는 임시 할당을 위해 빠른 자체 스택 할당자를 사용합니다. 이러한 할당은 매우 빠르며 수명이 1프레임 미만입니다. 할당자는 LIFO(선입선출) 스택을 사용합니다.

임시 할당자의 기본 블록 크기는 플랫폼의 경우 4MB이고 Unity 에디터의 경우 16MB입니다. 이 값은 커스터마이즈할 수 있습니다.

참고: 할당자 사용량이 설정된 블록 크기를 초과하면 Unity는 블록 크기를 늘립니다. 이러한 증가는 원래 크기의 두 배까지로 제한됩니다.

Fast Per Thread Temporary Allocators의 메인 스레드 블록 크기 커스텀 값
Fast Per Thread Temporary Allocators의 메인 스레드 블록 크기 커스텀 값

스레드의 스택 할당자가 가득 차면 할당은 스레드세이프 리니어 할당자로 폴백됩니다. 약간의 오버플로 할당은 괜찮습니다. 여기서 약간이란 한 프레임에 1–10개 또는 로드 중 수백 개 정도를 의미합니다. 그러나 프레임마다 숫자가 증가하면 블록 크기를 늘릴 수 있습니다.

사용량 보고서의 정보는 애플리케이션에 적합한 블록 크기를 선택하는 데 도움이 될 수 있습니다. 예를 들어 다음 메인 스레드 사용량 보고서에서 로드는 2.7MB에서 최대이지만 나머지 프레임은 64KB 미만입니다. 블록 크기를 4MB에서 64KB로 줄이고 로딩 프레임이 할당을 초과하도록 허용할 수 있습니다.

[ALLOC_TEMP_TLS] TLS Allocator
  StackAllocators :
    [ALLOC_TEMP_MAIN]
      Peak usage frame count: [16.0 KB-32.0 KB]: 802 frames, [32.0 KB-64.0 KB]: 424 frames, [2.0 MB-4.0 MB]: 1 frames
      Initial Block Size 4.0 MB
      Current Block Size 4.0 MB
      Peak Allocated Bytes 2.7 MB
      Overflow Count 0
    [ALLOC_TEMP_Job.Worker 18]

이 두 번째 예에서 워커 스레드는 대량의 임시 할당에 사용되지 않습니다. 메모리를 절약하기 위해 워커의 블록 크기를 32KB로 줄일 수 있습니다. 이것은 각 워커 스레드에 자체 스택이 있는 멀티 코어 시스템에서 특히 유용합니다.

[ALLOC_TEMP_Job.Worker 14]
      Initial Block Size 256.0 KB
      Current Block Size 256.0 KB
      Peak Allocated Bytes 18.6 KB
      Overflow Count 0
듀얼 스레드 할당자
스레드세이프 리니어 할당자