문득 상기 던전앤파이터 업데이트 내역을 보고, 제목과 같은 의문을 가졌다.
얼추 요즘 게임은 둘을 분리해서 사용하는 경우가 많다고 알고 있었는데, 막상 흐름을 생각해보니 어떻게 하는 거지 싶어
생각해보기로 했다.
단순히 생각하면 로직 스레드가 한 프레임에 해야할 일을 마무리하면, 버퍼같은 곳에 담아두고,
렌더 스레드는 프레임마다 로직 스레드에서 꺼내와서 렌더하면 될 것 같다.
> 실제로 회사에서도 이런 식으로 쓴다고 함
근데 CPU 개수가 늘고 있는데
로직, 렌더 스레드 등처럼 스레드의 행위를 기반으로 나누게 되면
언젠간 논리적으로 스레드를 나눌 수 없겠다는 생각을 했다.
https://www.youtube.com/watch?v=M1e9nmmD3II
Logic / Render 별로 나누는 것보단,
여러 개의 스레드가 개체에 대하여 동시에 Logic을 수행하고,
모든 스레드가 수행을 마치면 다같이 Render를 수행하는 등의 방식을 제시된 영상임
늘어나는 CPU 갯수에 대응하기 좋은 방법인 듯.
문득 유니티 Job System이 생각났는데,
Job System에 대해 알아보자.. 알아보자.. 해놓고 귀찮아서 던져놓고 있었으니 이 기회에 알아보도록 하자.
https://www.youtube.com/watch?v=3o12aic7kDY
아래 유튜브는 잡 시스템을 이용하여 여러 번의 무거운 연산을 수행하는 실험이다.
Job System이 자동으로 워커 스레드에다가 일 던져서 처리하는 모습을 볼 수 있는데, 프로파일러를 보면 성능도 상승하고 기존 스레드처럼 UnityEngine 내 API를 쓸 때 터지는 현상도 없어보임.
엥.. 그럼 진짜 이것만 있으면 멀티스레딩할 수 있나...? 라는 의구심이 든다.
엄청나보이는데 왜 풍문으로만 들었지
https://docs.unity3d.com/kr/2018.4/Manual/JobSystemOverview.html
C# 잡 시스템 개요 - Unity 매뉴얼
Unity C# 잡 시스템을 통해 사용자는 나머지 Unity 기능과 잘 연동하고 수정 코드 작성을 용이하게 해주는 멀티스레드 코드를 작성할 수 있습니다.
docs.unity3d.com
항상 문서만 보고는 애매함
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=canny708&logNo=221557618976
C# Job System
C# Job System은 유니티의 새로운 멀티 스레드 프로그래밍 기법입니다. 구조적으로는 멀티 스레드가 맞...
blog.naver.com
대충 유니티의 Job System은 스레드를 생성하는 게 아니라,
기존에 유니티가 생성해놓은 Worker Thread에 사용자의 Job을 의탁하는 형태의 시스템인 듯함
유니티의 워커 스레드에 탑승하는 개념이므로 무거운 기능의 스레드를 파기엔 애매하고,
정말 하나의 일 단위 (Job)를 추가하는 데에 사용하는 것이 적절할 듯하다.
> 위에서 말한 '개체'의 단위가 되기 좋아보인다.
또한 클래스를 사용할 수 없는 등 제약이 심해 범용적으로 여기저기 사용하긴 힘들어보이고,
Job System을 사용할 수 있도록 환경을 구축해야 사용이 가능해보인다.
https://www.youtube.com/watch?v=IzTbKdL8w8Q&t=2497s
간단한 사용 예제
https://www.youtube.com/watch?v=yi4nTDQcC78
ECS는 뭐고,
버스트 컴파일러는 뭐임? 담에 하자.
'끄적끄적' 카테고리의 다른 글
[일상] 근래 알아본 1000만원 이하 중고차 정리 (1) | 2023.04.03 |
---|---|
[일상] 3.11~14 고베, 오사카 여행 후기 (1) | 2023.03.15 |
2 PASS 카툰 렌더링 시 1 PASS를 꼭 front 컬링해줘야 하나? (0) | 2023.02.21 |