[TIL] Unity - 멀티 스레드 & GPU

MINO·2024년 7월 16일
post-thumbnail

2024-07-16


프로세스 (Process)

실행 중인 프로그램의 인스턴스를 의미
프로세스는 독립적인 메모리 공간을 가지며, 운영 체제에 의해 관리

쓰레드 (Thread)

프로세스 내에서 실행되는 작업의 단위
쓰레드는 프로세스의 메모리 공간을 공유하며, 더 가벼운 작업 단위로 간주


코루틴

코루틴은 메인 스레드에서 실행되지만, 비동기적으로 작업을 수행할 수 있게 해준다.

Unity 는 기본적으로 단일 쓰레드를 지원하며,
게임 오브젝트의 업데이트, 렌더링, 물리 계산 등 대부분의 주요 작업이 메인 스레드에서 처리된다.


동기식 VS 비동기식

동기식 (Sync)

  • 순차적인 실행 방식
  • 코드 구현이 쉬움 / 실행 순서 파악이 쉬움

비동기식(ASync)

  • 여러 작업들을 동시에 실행
  • 구현이 복잡하여 무한 루프나 무한 대기 상태에 빠질 수 있음

멀티 쓰레드

Unity 에서는 다음의 방법으로 멀티 쓰레드를 구현할 수 있다.

기능/패턴특징
Job System여러 작업을 정의하고 이를 여러 스레드에서 병렬로 실행할 수 있게 해준다.
Burst CompilerJob System 과 함께 사용하여 컴파일 과정에서 C# 코드를 최적화하여 퍼포먼스를 높일 수 있다.
Async/Await 패턴해당 키워드를 통해 비동기적으로 데이터를 로드하거나 네트워크 요청을 처리
Thread 클래스직접 쓰레드를 생성할 수 있으나 Unity API 와 함께 사용하기에 어려움


CPU 와 GPU 의 작동 방식

CPU (Central Processing Unit)

CPU는 일반적인 작업을 처리하기 위한 범용 프로세서
적은 수의 강력한 코어를 가지고 있다.

주로 복잡한 연산과 제어 흐름을 처리하는 데 적합.

GPU (Graphics Processing Unit)

GPU는 대량의 병렬 처리를 수행하기 위해 설계된 프로세서
수백에서 수천 개의 간단한 코어를 가지고 있다.

주로 그래픽 렌더링 및 데이터 병렬 처리에 최적화


작업 처리 방식

CPUGPU
주요 작업복잡한 연산, 제어 흐름동일한 작업을 대량으로 처리하는 그래픽스 연산
강점순차적인 작업 처리병렬 작업 처리
메모리 접근캐시 메모리 구조를 통해 빠른 데이터 접근 가능메모리 대역폭은 넓지만, 접근 속도는 느림

TIL 마무리

비동기적인 작업이 필요할 때, 코루틴만 사용해봤는데

다음 프로젝트에서 비동기적인 작업이 필요하다면

오늘 알게 된 Job System 이나 Async/Await 패턴 등을 사용해보면 좋을 것 같다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글