오늘은 간만에 유니티를 공부하면서 스스로 질문을 많이 해봤다. 이 중 제대로 대답하지 못했던 기초들을 정리하려고 한다.
그 중 첫 이야기는 코루틴이다. 사실 매우 자주 사용하고 이젠 익숙해졌지만 이게 뭔지 매.우.정.확.하.게 대답하지 못했다.
C#에서의 코루틴
- 비동기 코드를 구현하기 위한 방법 중 하나다. 일반적으로 메서드처럼 보이지만 '중간에 일시 중지되어 다른 코루틴을 실행하고 나중에 중단한 지점부터 계속 실행된다' => 일시정지 가능한 비동기 방법
Unity에서 코루틴 (항상 RTFM을 해보자 코루틴 - Unity 매뉴얼 (unity3d.com))
- 비동기 작업을 처리하면서도 게임 루프의 제어를 유지할 수 있기 때문이다. -> 동시성 프로그래밍이 가능해진다.
코루틴의 동작 깊게 알기
- 코루틴은 함수가 실행되는 동안 실행 위치를 저장하고 나중에 그 위치에서 실행을 다시 할 수 있게 하는데 코루틴의 상태는 코드 실행 위치와 로컬 변수, 매개 변수 등의 값들이 저장된다.
- 단일 스레드에서 동작하며 하나의 스레드 자원을 나누어 사용한다. 단일 스레드에서 실행되다 yield 반환문을 만나면 실행을 중단하고 다시 재개할 때 yield 반환문 이후 코드부터 실행됩니다. 이 때 코루틴이 사용하는 스택, 프로세스의 값 등은 메모리에 저장되어 있어 재개되는 시점에서 저장된 상태를 불러온다.
- 하나의 스레드에서 코루틴과 동기적 코드를 번갈아가며 실행할 수 있다.
- 결론은 싱글 스레드에서 동시성으로 진행되는 일시 중단, 재개가 가능한 프로그램 구성 요소
동시성
- 일을 여러개로 나누어 번갈아 가면서 실행하여 동시에 처리하는 것처럼 보이는 것
병렬성
- 멀티코어 환경에서 실제로 여러개의 일을 동시에 처리하는 것
질문) 동시성과 병렬성이 어떻게 다른가요
대답) 동시성은 멀티 작업을 위해 싱글 코어에서 여러개의 스레드가 번갈아 가며 실행되는 것을 의미하고 병렬성은 실제 멀티코어 환경에서 한 개 이상의 스레드를 포함하는 각 코어들(한마디로 멀티 스레드)을 동시에 실행하는 것을 말한다.
'Unity 끄적임' 카테고리의 다른 글
fake null 관련한 이야기 (0) | 2024.06.14 |
---|---|
Unity IL2CPP, JIT, AOT (0) | 2024.05.05 |
[게임수학] 내적, 외적 이야기 (0) | 2023.11.17 |
월드 공간과 UI 공간 (0) | 2023.10.17 |
Coroutine 이야기 (0) | 2022.11.11 |