코루틴(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이 뜬다..

코루틴 응용

코루틴 상태