Coroutine

C언어 등에서 일반적으로 사용하는 함수는 시작할 때 진입하는 지점이 하나 존재하고 함수가 모두 실행되거나, return 구문에 의해 종료되는 지점을 설정할 수있다.

이러한 함수를 Subroutine( 서브루틴 )이라 부르는데, 코루틴은 이를 더 일반화한 개념으로 진입하는 시점까지 여러 개를 가질 수 있는 함수를 의미한다. 개념적으로만 본다면 서브루틴의 한 종류라고 볼 수 있겠다.

 

C#, JavaScript, Python 등이 제공하는 Generator가 사실 코루틴의 한 형태이다.

 

caller가 함수를 call하고, 함수가 caller에게 값을 return하면서 종료하는 것에 더해 return하는 대신 suspend(혹은 yield)하면 caller가 나중에 esume하여 중단된 지점부터 실행을 이어갈 수 있다.

 

즉, 코루틴 함수가 호출되면 코루틴 함수 내부코드가 실행되고 있다가 suspend 혹은 yield에 의해 함수가 호출된 부분에 값이 반환되고 이후 다시 코루틴 함수를 호출하게 되면 코루틴 함수 내부에 suspend 혹은 yield 지점 이후 코드로 돌아와서 실행을 하게 된다는 말이다.

 

부분적으로, 그리고 특정한 상황이 맞아 떨어졌을 때 실행되는 함수.

 

- 장점

1. 성능

일반적으로 게임에서 코루틴을 사용하지 않는다면 매 프레임마다 Update구문에서 동작을 확인해야하는 상황이 발생한다.

하지만 코루틴을 사용하면 코루틴이 지정한 시간이 후에 자동으로 확인된다.

이러한 점 때문에 특히 모바일 기기에서 코루틴의 활용은 성능 향상에 큰 영향을 미친다.

2. 가독성

코드 가독성이 좋아진다. 이건 써보면 알 것 이다.

 

- 특성

* 특정 작업을 단계적으로 발생하게 한다.

* 시간 흐름에 따라 발생하는 루틴을 작성할 수 있다.

* 다른 연산이 완료될때까지 기다리는 루틴을 작성할 수 있다.

* 비동기가 아니다. = 동시에 발생하지 않는다.

 

 

 

 

Thread

현재에 와서 스레드의 경우는 멀티코어를 넘어서 many 코어 시대로 전환 되고 있기 때문에 이 자원들을 충분히 모두 이용하기 위해 병렬 프로그래밍을 하게 되는데 이 병렬 처리의 핵심도구가 스레드 이다.

 

멀티프로세스 기께에서, 스레드는 실제 다른 스레드와 함께 동시에 코드가 실행 될 수 있다. 하지만 여러 스레드를 사용하는 멀티스레드 프로그래밍은 코드를 이해하기 복잡하게 만든다.

다른 스레드가 특정 부분을 읽고 있는 동시에 그것을 변경할 수 있기 때문이다.

이 때문에, 공유 메모리영역을 만들지 않거나, 공유된 자원을 읽거나 변경시켜야 되는 경우라면, 공유된 자원으로 부터 다른 스레드를 잠궈버림으로써( Lock ) 이런 상황이 발생하지 않도록 하고 있다.

 

스레드를 이용하면 하나의 프로그램에서 한 번에 하나의 일을 처리하는 것이 아니라 동시에 많은 일을 처리할 수 있다.

 

- 특성

* 비동기 이다. = 동시에 발생한다.

 

 

 

 

 

 

ref : https://www.slideshare.net/QooJuice/coroutine-119750550

ref : https://poppy-leni.tistory.com/entry/%EC%BD%94%EB%A3%A8%ED%8B%B4-vs-%EC%93%B0%EB%A0%88%EB%93%9C

반응형

+ Recent posts