본 글은 Unity 2018.2.1f1 을 기반으로 작성되었습니다.
관련 글 링크 목록
#04.C# Job System_01
#04.C# Job System_02
Unity C# Job System 메뉴얼
- https://docs.unity3d.com/kr/2018.1/Manual/JobSystem.html
---------------------
01번 글에 이어서, 사실 Job System을 이해하기전에 개념적으로 알아두어야 할 내용이 하나 더 있습니다.
혹시나 C# Job Sytsem 메뉴얼을 먼저 전부 읽어보았다면 본 내용은 스킵하셔도 됩니다.
멀티 쓰레딩 이라는 것을 공부해보셨다면 아마 "경쟁" 이라는 게 무슨 뜻인지 알 것입니다.
간단히 설명하면
어떤 int count; 라는 변수를 점유(접근 및 사용)하기 위해
어떤 스레드가 count = 10; 이라는 작업을 하려고 하지만.
동 시간대에 다른 스레드가 count = 99; 라고 작업을 하기 위해
두 스레드간에 자원을 선점하기 위해 레이스에 빠져드는 것을 "경쟁" 이라고 합니다.
Job System은 이런 메모리 선점에 대해서 세이프한 공유 메모리 유형을 제공합니다.
그것이 바로 NativeContainer 입니다.
NativeContainer를 사용하면 이런 제한점을 극복 할 수 있습니다.
NativeContainer 란 무엇입니까?
- NativeContainer는 네이티브 메모리에 비교적 안전한 C# Wrapper 를 제공하여 관리되는
값 형식 입니다.
- NavtiveContainer를 사용하면 Job을 통해 사본으로 작업하는 대신 주 스레드와 공유 된 데이터에 접근 할 수 있습니다.
기본 NativeContainer는 NativeArray<T> 가 있습니다.
그러나 Unity - ECS(Entity Component System) 에서는 아래 4가지의 NativeContainer를 제공합니다.
(주의! Unity Package - Unity.Collections를 필요로 합니다.)
- NativeList - List<T> 와 유사합니다.
- NativeHashMap - Dictinonary<K, T>와 유사합니다.
- NativeMultiHashMap - Dictinonary<K, T>와 유사하지만 동일한 Key를 등록할 수 있습니다.
- NativeQueue - Queue<T>와 유사합니다. (FIFO 선입선출 구조)
자세한 Unity - ECS에 대해서는 추후 ECS 편에서 다루도록 하겠습니다.
개념적인 이론 글은 여기까지 적고, 다음 글에서 이제 실제 Job System을 사용하는 예제를 적어보도록 하겠습니다.
'Unity Engine > Unity3D Engine' 카테고리의 다른 글
C# Unity - Serializable Dictionary (1) | 2020.01.29 |
---|---|
#04.C# Job System_01 (0) | 2018.12.22 |
#03.JobSequenceManager (0) | 2018.12.21 |
#02.JobRepeatManager - 03 (0) | 2018.12.20 |
#02.JobRepeatManager - 02 (0) | 2018.12.20 |