옜날에 공부한거중에서 운영체제 스레드 사용할때 직접 제어권 반납하는 처리 작성 안했고, 프로세서가 싱글 코어여도 동시성 가능햇음.
그 비결은… 운영체제가 직접 스레드를 관장해 실행 중단과 재개를 결정하는 선점형 멀티태스킹이었다. 선점형 멀티태스킹
우리에게 직접 스레드를 실행 중단 및 재개할 수 있는 함수가 있다면? 단일 스레드로 동시적인 코드 작성이 가능함! 이럴때 코루틴을 사용
- 코루틴
- 원하는 코드 지점에서 단일 실행스레드의 실행 중단하거나 재개할 수 있는 수단
- 장점
- 명시적으로 스레드 다루지 않음
- 비동기적 작업을수행하는 효율적이고 유연한 코드 작성 가능
- 코루틴은 코루틴 간의 전환이 협동형 이라는점에서 운영체제 스레드와 다름
- 다시말하면,
- 프밍 언어 및 실행 환경과 코루틴 간의 전환을 개발자가 직접 관리해야함!
- 원하는 시점에 특정 코루틴의 실행을 중단하고 다른 작업의 실행을 대신 재개 가능

- 네트워크 요청같이 오랫동안 블로킹 예상되는 연산있을때 유용함.
- 시스템의 스케줄러 개입시키지 않고 코루틴에서 직접 다른 작업으로 전환 가능
- 아마 운체가 개입안해서?
코루틴 개념은 continuation 에서 나옴. 특정 시점에 프로그램 실행 컨텍스트의 스냅샷과 같은것으로, 현재 호출 스택, 지역 변수 등의 정보 담는다. 이 정보 가지고 있다가 프로그램을 나중에 다른 스레드나 아예 다른 컴에서도 재개 가능
코루틴은 조건에 따라 실행 중단했다가 나중에 실행을 재개해서 완료할 수 잇는 함수
이벤트 반복문과 코루틴 사용하면 다중 스레드나 프로세스 없이 단일 스레드로 작업을 효율적으로 실행하는 협동형 멀티태스킹 구현 가능함. 코루틴 덕에 더 정교한 동시적 흐름 제어 구현가능하며 비동기적 작읍을 더 쉽게 다루고 자원활용 최적화 가능하다.
코루틴 == 경량 스레드