일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- job
- Job 시스템
- 다이나믹 폰트
- 단말기 해상도
- 최적화
- 가이드
- base64
- ui
- 샘플
- Unity Editor
- C#
- 암호화
- Tween
- RSA
- 이미지 폰트
- AES
- 2D Camera
- unity
- Custom Package
- DotsTween
- Framework
- Dynamic Font
- 프레임워크
- sha
- 커스텀 패키지
- TextMeshPro
- jumping ball
- adfit
- 텍스트 메시 프로
- Dots
- Today
- Total
EveryDay.DevUp
[Unity] Job 시스템 이해, IJobParallelFor- (4) 본문
※ JobHandle을 보기 전, Job 시스템의 이해가 필요하다면 하단의 게시물을 참고
https://everyday-devup.tistory.com/97
● Interface IJobParallelFor
▶ IJob이 단일 워커 스레드에서 Execute()가 한번 처리되었다면, IJobParallerFor는 사용 가능한 모든 워커 스레드에서 Execute()가 실행 횟수 만큼 나뉘어서 실행된다.
▶ IJobParallelFor는 Execute()의 로직은 동일하지만 특정 Index의 매개 변수가 다를 때 사용하면 유용하다. 같은 로직을 여러번 수행할 때 묶음으로 처리함으로써 성능 향상의 도움이 된다.
[JobProducerType( typeof( IJobParallelForExtensions.ParallelForJobStruct<> ) )]
public interface IJobParallelFor
{
//
// 요약:
// Implement this method to perform work against a specific iteration index.
//
// 매개 변수:
// index:
// The index of the Parallel for loop at which to perform work.
void Execute(int index);
}
▶ IJob과 달리 Execute에 Index가 추가되었는데, 해당 Index로 Job의 데이터 리스트에서 가져올 데이터를 확인할 수 있다.
using UnityEngine;
using Unity.Jobs;
using Unity.Collections;
public class JobSample : MonoBehaviour
{
/// <summary>
/// Excute의 Index를 result 배열에 넣어주는 단순한 예제
/// </summary>
struct JobParallel : IJobParallelFor
{
public NativeArray<int> result;
public void Execute(int index)
{
result[index] = index;
}
}
// Job을 실행할 횟수
int count = 10000;
// 하나의 워커 스레드당 설정할 Job의 개수
// 워커스레드가 3개인 경우 10000개의 Job을 10개씩 나누어 3개의 워커 스레드에 나눈다.
// 10000/10 = 1000, 1000/3 = 333 개 묶음으로 나뉨
int batchCount = 10;
void Start()
{
NativeArray<int> result = new NativeArray<int>( count, Allocator.TempJob );
JobParallel jobParallel = new JobParallel();
jobParallel.result = result;
// count, batchCount에 따라 워커 스레드에 Job이 나뉘게 된다.
JobHandle handle = jobParallel.Schedule( count, batchCount );
handle.Complete();
result.Dispose();
}
}
▶ IJob이 한번에 여러개의 워커 스레드에서 실행된다는 것 외에는 기본적인 개념은 IJob과 동일하다.
▶ IJobParallelFor를 확장하여, 한번에 여러개의 Transform을 처리하는 Job을 만들 수 있는 IJobParallelForTransform도 있다. IJobParallelForTransform를 사용하려면 using UnityEngine.Jobs 을 선언해야한다.
▶ PackageManager에서 Jobs Preview Package를 Import하면 IJobParallelFor의 확장형 인터페이스를 추가로 사용할 수 있다.
: PreviewPackage이기 때문에 해당 확장형 인터페이스를 사용하기 보다는 기존의 IJobParallelFor를 사용하는 것이 현재로써는 더 좋다.
※ 참고 자료
'DotsTween' 카테고리의 다른 글
[Unity] DotsTween 기능 및 사용 가이드 ( v.0.0.1 ) (2) | 2020.07.25 |
---|---|
[Unity] Job 시스템 이해, JobHandle - (3) (0) | 2020.07.15 |
[Unity] Job 시스템 이해, NativeContainer - (2) (1) | 2020.07.15 |
[Unity] Job 시스템 이해, IJob - (1) (0) | 2020.07.15 |
[Unity] Update() vs Job, Burst 성능 비교 (0) | 2020.07.12 |