coroutines essential (코루틴의 본질)
1. 코루틴의 정의
Coroutine
- co-(함께)와 routine(루틴)의 합성어로, 여러 루틴이 협력(cooperative)적으로 실행을 제어하는 프로그래밍 패턴
코루틴은 실행을 일시 중지했다가 다시 재개할 수 있는 협력 루틴으로, 복잡한 비동기 프로그래밍을 간소화하는 데 사용됩니다.
일반적인 서브루틴(subroutine)과 달리, 실행 흐름을 협력적으로 제어할 수 있으며, 이를 통해 효율적인 자원 관리와 코드 간결화를 가능하게 한다. 스레드 내에서 동작하기 때문에 메모리 사용량도 줄일 수 있습니다. 이는 여러 작업을 효율적으로 관리하기 위한 동시성(concurrency) 처리 방식입니다
2. 일시 중지했다가 다시 재개할 수 있는 협력 루틴
코루틴에 대해서 알아보기 위해, 일반적인 함수(루틴)의 실행에 대해서 알아보자.

위와 같이 ya를 출력하는 함수 중간에 ho를 4번 출력하는 함수있다고 가정해보자. 그렇다면, 녹색선과 같은 실행 흐름을 가지게 될것이다.

함수가 실행되는 동안 스택 메모리 영역은 ho( )를 호출하기 위해 일시적으로 Main()의 상태를 보존하고, ho()의 호출이 종료되면, 메모리에서 삭제후 다시 Main()으로 돌아온다.

일반적인 함수의 funcation "Call" 과 funcation "Return" 에 대해서 정리해보자!

함수의 반환이 함수의 호출과 비슷한 속성을 가진다면 어떻게 될까??
이것이 바로 코루틴의 본질이다.
함수를 반환할때 뿐 아니라 언제든지 루틴을 중지하고 상태를 보존후에 다시 재개할 수 있는것

코루틴을 이용해서 say ho 함수를 다시 작성해보자. 그렇다면 아래와 같은 흐름을 가지게 할 수가 있다.

일정시간 동안 여러 작업을 진행하기 때문에 Concurrent(동시실행)을 이룩했다 볼 수 있습니다.
