ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기술 면접 공부] C# 코루틴 (Coroutine)
    기술 면접 공부 2021. 1. 7. 14:54

     

    정의

    호출 루틴과 피호출 루틴이 대등 관계를 유지하는 처리 절차로 피호출 루틴의 수행이 완전히 끝나기 전에 호출 루틴으로 제어가 돌아가고 제어가 다시 피호출 루틴으로 돌아왔을 때는 중단된 부분부터 수행된다.

     

    사용하는 이유

    게임 프로그래밍은 수많은 오브젝트들의 상호 작용으로 표현되기 때문에 동시성을 표현하는 것이 중요하다. 유니티는 .NET을 사용함에도 불구하고 단일 스레드로 동작한다. 그 이유는 멀티 스레드 프로그래밍은 버그 발생률이 높아지고 스레드 간 교착 상태 경합 등 신경 써야 할 부분이 많아지기 때문이다. 따라서 깔끔하게 단일 스레드만 사용하되 동시성을 확보하기 위해 코루틴을 이용해 여러 개의 스레드가 동시에 동작하는 효과를 보여준다.

    장점

    싱글 스레드를 유지하면서 멀티 스레드처럼 동시성을 확보할 수 있다.

    각 task가 독점적으로 CPU를 사용하고 사용이 끝나면 자발적으로 양보한다. 따라서 리소스 사용 중 CPU를 뺏기지 않기 때문에 락(lock)이나 세마포어(semaphore)와 같은 동기화 수단이 필요 없다.

     

    자주 나오는 질문

    서브 루틴과의 차이

    코루틴은 주종 관계를 가지지 않는 협력 관계다.

    매 호출마다 초기화되는 서브 루틴과는 달리 호출 시 관련된 모든 정보를 보존하기 때문에 이전에 실행했던 다음부터 실행할 수 있다.

    Entry Point(입구)가 하나만 있는 서부 루틴과 달리 여러 개의 Entry Point를 허용한다.

     

    코루틴과 스레드의 차이

    코루틴은 스레드가 아니다!

    코루틴은 일종의 시분할 방식으로 하나의 프로세스를 여러 루틴들이 시간을 나눠서 사용하지만 스레드는 동시에 여러 프로레스가 여러 작업을 진행한다.

     

    멀티 프로세스의 문제점

    하나의 스레드가 다른 스레드의 특정 부분을 읽고 있는 동시에 그것을 변경할 수 있기 때문에 동기화의 문제가 생긴다.

Designed by Tistory.