EveryDay.DevUp

[Unity] Job 시스템 이해, JobHandle - (3) 본문

DotsTween

[Unity] Job 시스템 이해, JobHandle - (3)

EveryDay.DevUp 2020. 7. 15. 21:16

※ JobHandle을 보기 전, Job 시스템의 이해가 필요하다면 하단의 게시물을 참고

https://everyday-devup.tistory.com/97

 

[Unity] Job 시스템 이해, IJob - (1)

● Unity의 Job 시스템에 대한 이해가 필요하다면, 다음의 게시물을 참고 https://everyday-devup.tistory.com/69 [Unity] DOTS - 프로세스, 스레드, C# Job 시스템 ECS를 알아보기 전 DOTS에 대해 궁금한 점이..

everyday-devup.tistory.com

● JobHandle

 JobHandle은 Job의 Schedule을 실행했을 때 반환되는 값으로, Job을 컨트롤 할 수 있는 기능을 가진다.

 Job은 독립적으로 실행될 수도 있지만, 특정한 Job의 경우 선행 Job의 실행이 끝난 뒤에 해당 결과를 바탕으로 자신의 Job을 실행 시켜야하는 경우가 있을 수 있다. 이때 JobHandle을 사용하여 Job의 종속성을 설정할 수 있다.

using UnityEngine;
using Unity.Jobs;
using Unity.Collections;

public class JobSample : MonoBehaviour
{
	struct JobSigle : IJob
	{
		public int a;
		public int b;

		public NativeArray<int> result;

		public void Execute()
		{
			result[0] = a + b;
		}
	}

	struct JobAdd : IJob
	{
		public NativeArray<int> result;

		public void Execute()
		{
			result[0] = result[0] + 1;
		}
	}

	void Start()
	{
		NativeArray<int> result = new NativeArray<int>( 1, Allocator.TempJob );

		JobSigle jobSigle = new JobSigle();
		jobSigle.a = 1;
		jobSigle.b = 2;
		jobSigle.result = result;

		JobHandle handle = jobSigle.Schedule();

		JobAdd jobAdd = new JobAdd();
		jobAdd.result = result;

		JobHandle addHandle = jobAdd.Schedule( handle );

		addHandle.Complete();

		Debug.LogWarning( " addJob : " + result[0] );

		result.Dispose();
	}
}

: jobAdd가 JobSingle이 끝난 뒤에 호출하여 결과가 4가 나오게 됨을 확인할 수 있다.

▶ 필요한 부분의 Job의 종속성을 설정하는 것은 어쩔수 없지만, 기본적으로 Job은 하나의 수행을 독립적으로 수행할 때 좋다고 생각하기 때문에 최대한 종속성을 피하는 것이 좋다.

▶ 하나의 Job이 끝날 때까지 메인 스레드가 대기할 수 있도록 JobHandle.Complete()를 사용할 수 있다. 

: Complete()는 Job의 Execute()가 끝날 때까지 메인 스레드를 대기하도록 만들기 때문에, 메인 스레드에서 Job의 NativeContainer에 안전하게 접근할 때 사용하면 좋다.

※ 후속 게시물

https://everyday-devup.tistory.com/100

 

[Unity] Job 시스템 이해, IJobParallelFor- (4)

※ JobHandle을 보기 전, Job 시스템의 이해가 필요하다면 하단의 게시물을 참고 https://everyday-devup.tistory.com/97 [Unity] Job 시스템 이해, IJob - (1) ● Unity의 Job 시스템에 대한 이해가 필요하다면,..

everyday-devup.tistory.com

 참고 자료 

https://docs.unity3d.com/kr/current/Manual/JobSystem.html