Unity의 잡 시스템을 사용하면 멀티스레드 코드를 작성할 수 있으므로 애플리케이션에서 사용 가능한 모든 CPU 코어를 사용하여 코드를 실행할 수 있습니다.이렇게 하면 애플리케이션이 하나의 CPU 코어에서 모든 코드를 실행하는 대신 실행 중인 모든 CPU 코어의 용량을 보다 효율적으로 사용하므로 성능이 향상됩니다.
잡 시스템만 단독으로 사용할 수 있지만, 성능 향상을 위해서는 Unity의 잡 시스템용 잡 컴파일을 위해 특별히 설계된 버스트 컴파일러를 함께 사용해야 합니다.버스트 컴파일러는 코드 생성을 개선하여 모바일 디바이스의 성능을 향상하고 배터리 소모를 줄입니다.
또한 Unity의 엔티티 컴포넌트 시스템과 함께 잡 시스템을 사용하여 고성능 데이터 지향 코드를 생성할 수도 있습니다.
Unity는 자체 네이티브 잡 시스템을 사용하여 애플리케이션이 실행되는 기기에서 사용 가능한 CPU 코어 수에 따라 달라지는 여러 개의 워커 스레드를 통해 자체 네이티브 코드를 처리합니다.일반적으로 Unity는 프로그램 시작 시 기본적으로 실행되는 메인 스레드라는 하나의 스레드에서 코드를 실행합니다.그러나 잡 시스템을 사용하면 Unity는 멀티스레딩이라고 하는 워커 스레드를 통해 코드를 실행합니다.
멀티스레딩은 CPU의 기능을 활용하여 여러 코어에서 동시에 많은 스레드를 처리합니다.작업이나 명령이 차례로 실행되는 대신 동시에 실행됩니다.워커 스레드는 서로 병렬로 실행되며 완료되면 그 결과를 메인 스레드와 동기화합니다.
잡 시스템은 CPU 코어의 용량에 맞는 충분한 스레드만 확보하므로 사용 가능한 CPU 코어 수를 구체적으로 알 필요 없이 필요한 만큼의 작업을 예약할 수 있습니다.이것은 CPU 코어보다 더 많은 스레드를 비효율적으로 생성하기 쉬운 스레드 풀링과 같은 기술에 의존하는 다른 잡 시스템과 다릅니다.
잡 시스템은 예약 전략의 일부로 작업 훔치기를 사용하여 워커 스레드 간에 공유되는 작업의 양을 균등하게 합니다.워커 스레드는 다른 워커 스레드보다 작업을 더 빨리 처리할 수 있으므로 워커 스레드가 모든 작업 처리를 마치면 다른 워커 스레드의 대기열을 살펴본 다음, 다른 워커 스레드에 할당된 작업을 처리합니다.
멀티스레드 코드를 더 쉽게 작성할 수 있도록 잡 시스템은 모든 잠재적인 경쟁 상태를 감지하고 그로 인해 발생할 수 있는 버그를 차단합니다.경쟁 상태는 한 작업의 출력이 제어할 수 없는 다른 프로세스의 타이밍에 따라 달라질 때 발생합니다.
예를 들어, 잡 시스템이 메인 스레드의 코드에서 데이터에 대한 레퍼런스를 잡으로 보내는 경우, 잡이 데이터를 쓰는 동시에 메인 스레드가 데이터를 읽고 있는지 확인할 수 없습니다.이 시나리오는 경쟁 상태를 생성합니다.
이 문제를 해결하기 위해 잡 시스템은 각 잡에 메인 스레드의 데이터 레퍼런스가 아닌 잡에 필요한 데이터의 사본을 보냅니다.이 사본은 데이터를 격리하여 경쟁 상태를 제거합니다.
잡 시스템이 데이터를 복사하는 방식에 따라 잡은 blittable 데이터 타입에만 액세스할 수 있습니다.이러한 타입은 관리되는 코드와 네이티브 코드 간에 전달할 때 변환이 필요하지 않습니다.
잡 시스템은 memcpy를 사용하여 blittable 타입을 복사하고 Unity의 관리되는 부분과 네이티브 부분 간에 데이터를 전송합니다.잡을 예약할 때 memcpy를 사용하여 데이터를 기본 메모리에 저장하고, 잡을 실행할 때 관리되는 측에 해당 사본에 대한 액세스 권한을 부여합니다.자세한 내용은 잡 예약을 참조하십시오.
컬렉션 패키지는 핵심 Unity 엔진에서 제공하는 잡 시스템 외에도 많은 잡 타입과 네이티브 컨테이너를 확장합니다.자세한 내용은 컬렉션 문서를 참조하십시오.