코루틴
Co(함께) + routine(일의 순서) 2개가 합쳐진 단어로 함께 동작하며 규칙이 있는 일의 순서를 뜻함.
비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소
코루틴의 사용
코루틴을 사용하면 여러 프레임에 현재 함수의 작업을 분산하여 진행할 수 있음.
함수 실행 중 yield return을 사용하여 작업을 일시 중단한 후, 다른 프레임/시간에 제어권을 다시 넘겨받아 사용.
코루틴의 사용
주로 시간 지연, 애니메이션 효과, 비동기 작업 등을 다루는 데에 사용
using UnityEngine; public class LogoEffect : MonoBehaviour { public float fadeInTime = 2f; public float waitTime = 1f; public float fadeOutTime = 2f; private SpriteRenderer logoRenderer; void Start() { logoRenderer = GetComponent<SpriteRenderer>(); // 코루틴 시작 StartCoroutine(LogoAnimation()); } IEnumerator LogoAnimation() { // 나타나기 yield return FadeIn(fadeInTime); // 일정 시간 대기 yield return new WaitForSeconds(waitTime); // 사라지기 yield return FadeOut(fadeOutTime); } IEnumerator FadeIn(float time) { float elapsedTime = 0f; Color startColor = logoRenderer.color; while (elapsedTime < time) { elapsedTime += Time.deltaTime; float t = Mathf.Clamp01(elapsedTime / time); logoRenderer.color = new Color(startColor.r, startColor.g, startColor.b, t); yield return null; } } IEnumerator FadeOut(float time) { float elapsedTime = 0f; Color startColor = logoRenderer.color; while (elapsedTime < time) { elapsedTime += Time.deltaTime; float t = Mathf.Clamp01(1f - elapsedTime / time); logoRenderer.color = new Color(startColor.r, startColor.g, startColor.b, t); yield return null; } } }
StartCoroutine(LogoAnimation())을 호출하여 코루틴을 시작하고, LogoAnimation 코루틴 내에서는 FadeIn, FadeOut 코루틴을 호출하여 각각 나타나기와 사라지기 효과를 구현
yield return 문을 사용하여 각 단계에서 대기하도록 하며, 이를 통해 여러 프레임에 걸쳐 작업을 수행
쓰레드(Thread)
별개의 쓰레드에서 동작
쓰레드는 독립적으로 실행되며, 각각의 쓰레드는 자체적인 작업 흐름을 가지고 실행됨
동시에 여러 개의 일을 처리
다수의 쓰레드가 동시에 실행될 수 있어, 여러 작업을 동시에 처리할 수 있음
선점형 쓰레드
쓰레드는 선점형 방식으로 동작하여, 일을 하는 동안에도 다른 쓰레드가 실행됨
비동기적 동작
각 쓰레드는 비동기적으로 동작하며, 서로 독립적으로 실행
공유 메모리와 Lock
공유 메모리를 사용할 경우, 여러 쓰레드 간의 메모리 접근이 겹칠 수 있음
Lock을 사용하여 동기화하면 먼저 접근한 쓰레드가 우선적으로 사용
코루틴(Coroutine)
단일 쓰레드에서 동작
코루틴은 주로 단일 쓰레드에서 동작하며, 해당 쓰레드의 실행 흐름 안에서 동작
여러 개의 일을 나누어 처리
코루틴은 여러 개의 작업을 나누어 순차적으로 처리
비선점형 쓰레드
코루틴은 비선점형 방식으로 동작하여, 현재 코루틴이 끝날 때까지 다른 코루틴들은 대기
동시에 동작하지 않음
단일 쓰레드에서 동작하므로, 메모리 접근이 겹칠 일이 없음
현재 동작 중인 코루틴이 메모리를 사용하고 있을 때, 다른 코루틴들은 대기
비동기적이 아님
코루틴은 여전히 동기적으로 동작하며, 각 작업은 이전 작업이 완료된 후에 순차적으로 진행