코루틴이란?
코루틴은 동시성 프로그래밍을 가능케 하도록 만든 개념(동시에 발생하지는 않는다.)으로 쓰레드와 비교가 많이 되지만 함수이다. 별도의 쓰레드 없이 메인 쓰레드 상에서 별도의 쓰레드가 있는것 처럼 번갈아 가며 병렬처리나 유사한 동작을 수행할 수 있다.
쓰레드와 비슷하게 동시성을 보장하기위한 기술이다. 하지만 쓰레드와 코루틴은 다른 개념이다. 여러개의 작업을 동시에 수행할 때 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는 해당 키워드를 만나자 마자 코루틴을 빠져나온다.
도움이 되셨다면 공감버튼을 눌러주세요.🥰
'개발일지 > Unity 3D&C#' 카테고리의 다른 글
[C#] 반복문 - foreach / for / while (0) | 2022.06.30 |
---|---|
[C#] 람다식, 람다 문(Lambda) (0) | 2022.06.24 |
[C#] 델리게이트(delegate) - Func, Action, Predicate (0) | 2022.06.24 |
[C#] 델리게이트(delegate) - 델리게이트, 콜백 사용 방법 및 사용 이유 (1) | 2022.06.16 |
[디자인 패턴]Singleton 패턴 (0) | 2022.06.07 |
댓글