■ C# Job System
1. 유니티 내에서 멀티스레딩을 할 수 있는 방법 중 하나
2. 다른 방법들과의 차별점[장점]이 아래와 같이 있다.
· Automates Scheduling
· Safety Checks to avoid Race conditions and other common issues with multi-threading
[Race Condition 발생 조건]
1. 공유 자원(Shared Resource)에 여러 스레드가 접근
2. 동기화가 제대로 이루어지지 않음
3. 스레드가 순서에 상관없이 실행됨
3. 많은 양의 연산 혹은 수행을 할 때 사용하기 적합하다.
· 예로 Procedural Generation, Path Finding, Complex Algorithms 등등이 있다.
· 이상적인 방법은 메인 스레드에서는 시스템 로직을 그대로 수행하고 복잡한 연산을 Job System을 통해 비동기화한다.
· Job이 끝날 경우 메인 스레드에서 반환값을 받고 resync를 한다.
■ Job System의 역할 및 유의할 점
1. 같은 프레임 안에 완료되어야 하는 작업들을 대상으로 사용되어져야 한다.
· 만약 긴 시간 동안 이루어져야 하는 작업이라면 차라리 async를 사용하는 것이 더 바람직할 수 있다.
2. 메인스레드의 부담을 덜어주고 병렬 계산을 한다.
· Unity의 기본 실행 방식은 모든 작업 (렌더링, 물리, 입력 등)이 메인스레드에서 직렬적으로 실행된다.
· 메인 스레드는 게임 루프의 핵심이므로 작업이 많아질수록 게임 성능이 저하된다.
· Job System은 병렬로 실행 가능한 작업들을 메인 스레드에서 분리하여 백그라운드 스레드에서 실행시킨다.
· 예로, 복잡한 AI 연산, 물리 계산, 대량의 데이터 변환 작업 등은 메인 스레드에서 제거하고 Job system을 통해 처리한다.
[※ 주의할 점]
· 여러 Job이 같은 데이터를 바라볼 때 경쟁 상태가 발생할 수 있으므로 스케쥴러가 자동적으로 Job 간의 스케쥴을 조율한다.
· 반대로 데이터를 여러 곳에서 동시에 '읽으려고 하는 것'은 문제 없다.
3. Unmanaged Data Types에 대해서만 사용이 가능하다.
· 즉, int, float, double, bool, char와 같은 값 타입 (Primitive Types)과 구조체 (Stack) 그리고 포인터 & 메모리 주소에 대해서만 [unsafe code] 사용 가능.
· Managed Type인 배열 및 컬렉션을 JobSystem에서 활용하고 싶다면 Unity에서 제공하는 NativeArray, NativeList와 같은 컨테이너를 사용 및 직접 메모리 할당과 해제를 해줘야 한다.
[※ 이와 같이 하는 이유]
· 가비지 컬렉터의 메모리 관리에 개입되지 않기 위함. GC가 개입하는 시점에 성능 저하가 일어날 수 있으며, 일시적인 앱
의 정지(GC Pause)가 일어날 수 있다.
· 메모리 안정성 및 예측 가능성: 메모리 누수나 불필요한 메모리 할당을 줄이기 위함.
4. Burst Compile이 가능하다.
5. ECS 뿐만이 아니라 MonoBehaviours 와도 동작이 가능하다.
■ Collections
[대표적인 종류]
· NativeArray
· NativeList
· NativeQueue
· NativeHashMap
· UnsafeCollections
: Safety Check를 안하는 컬렉션이다. 위 네 종과의 성능 차이는 눈에 띄지 않아서 안전을 위해 Native컬렉션을 사용을 권장.
■ Burst Compile
· 우리가 작성한 코드를 Native CPU Code로 변환해주는 작업이다.
[장점]
1. SIMD 연산
· a single bit of CPU Code로 multiple bits of data를 대상으로 연산을 수행한다.
2. 호환성
· C# Job System이랑 매우 매끄럽게 통합이 가능하다. 그저 코드 위에 [BurstCompile] 어트리뷰트를 추가하면 끝
'개발 (Game) > Unity (DOTS)' 카테고리의 다른 글
[DOTS] ECS & C# Job System & Burst Compile 기초 실습 (1) | 2025.03.01 |
---|---|
[DOTS] Netcode For Entities, Physics (0) | 2025.03.01 |
[DOTS] 기본 이론 및 ECS 내용 정리 (0) | 2025.03.01 |