코루틴(Coruotine)
코루틴 제어, 상태, 양방향 전송
서브루틴 : 메인루틴 호출 → 서브루틴에서 수행(흐름 제어)
코루틴 : 루틴 실행 중 중지 → 동시성 프로그래밍
코루틴 : 쓰레드에 비해 오버헤드 감소
쓰레드 : 싱글스레드 → 멀티스레드 → 복잡 → 공유되는 자원 → 교착 상태 발생 가능성, 컨텍스트 스위칭 비용 발생, 자원 소비 가능성 증가
제너레이터 기반 코루틴이라고도 설명하는 곳이 있다. 왜냐하면 코루틴은 제너레이터 기반을 만들어 졌기 때문이다.
# 코루틴 ex1
def coroutine1():
print('>>> coroutine started')
i = yield
print('>>> coroutine received : {}'.format(i))
# 메인 루틴
# 제너레이터 선언
cr1 = coroutine1()
print(cr1, type(cr1))
# yield 지점까지 서브루틴 실행
next(cr1)
# next(cr1)
# 값 전송
# cr1.send(100) # 기본 전달 값은 None
# 잘못된 사용
cr2 = coroutine1()
# cr2.send(200)
에러는 뜨지만 값이 들어간다. 그래서 코루틴 받는값이 숫자 100이 뜬다..