본문 바로가기
개발일지/Unity 3D&C#

[UNITY] 코루틴이란?

by 쫌눈 2022. 6. 7.
반응형

코루틴이란?

코루틴은 동시성 프로그래밍을 가능케 하도록 만든 개념(동시에 발생하지는 않는다.)으로 쓰레드와 비교가 많이 되지만 함수이다. 별도의 쓰레드 없이 메인 쓰레드 상에서 별도의 쓰레드가 있는것 처럼 번갈아 가며 병렬처리나 유사한 동작을 수행할 수 있다.

쓰레드와 비슷하게 동시성을 보장하기위한 기술이다. 하지만 쓰레드와 코루틴은 다른 개념이다. 여러개의 작업을 동시에 수행할 때 Thread는 각 작업에 해당하는 메모리 영역을 할당하는데, 여러 작업을 동시에 수행해야 하므로 OS레벨에서 스케쥴링을 필요로 한다. 
코루틴은 lightweight Thread라고 불리며 작업을 효율적으로 분배하여 수행함에 있어 각 작업에 대해 Thread할당이 아닌 Object만을 할당하고, 이 Object를 자유자재로 스위칭하는것이다.

코루틴 함수를 호출할 때 코루틴 함수 내부코드가 실행되고 있다, yield를 만나면 yield에 의해 반환되고, 이후 다시 코루틴 함수를 호출하면 yield지점 이후의 코드를 실행하게 된다.

Update()함수에서 매 프레임마다 호출하는것 보다 성능이 좋으며, 특정 작업을 단계적으로 수행하고, 시간 흐름에 따라 발생하는 루틴 작성에 용이하다. yield가 있어, 다른 연산이 완료될 때 까지 기다리는 루틴을 작성할 수 있다.

스레드와 차이점

스레드는 비동기로, 여러 스레드가 있다면 한꺼번에 동시에 실행되는 반면, 코루틴은 프로그램이 실행 중일 때 특정 시점에 코루틴으로 이동하고 그 전에 진행 중이던 루틴은 정지한다. 즉, 한번에 하나의 코드만 실행된다. 그러므로 동기화 문제가 없다.

멀티쓰레드의 문제점(공유 메모리문제, 동기화, 데드락 문제)를 보완한게 코루틴이다.

싱글코어에선 코루틴은 이동 시점이 더 잘 조절되고 context switching이 적어 성능면에서 멀티 스레드보다 좋을 수 있지만 멀티코어 프로세서를 활용할 수 없다는 문제점이 있으며 스레드보다 성능이 떨어진다.

yield return VS yield break

yield return 은 지정한 시간만큼 (WaitForSeconds(), null,...등) 유니티에 제어권을 넘겨주어 대기한다.

yeild break는 해당 키워드를 만나자 마자 코루틴을 빠져나온다.

 

도움이 되셨다면 공감버튼을 눌러주세요.🥰

 

 

 

반응형

댓글