iterator
란 값 생성기iterator
란 next()
를 호출할 때 다음 값을 생성해내는 상태를 가진 헬퍼 객체즉, 값을 요청할 때마다 내부 상태를 일정하게 유지하고 있기 때문에 다음값(next)를 계산하는 방법을 알고 있다.
iterator는 next()를 호출할 때마다 두가지의 작업을 수행한다.
generator
란 iterator
를 만드는 도구return
대신 yield
로 반환next()
메서드가 호출되면 중단된 지점부터 다시 시작(모든 데이터값과 '마지막' 실행 명령문을 기억)즉, retrun을 사용하면 내부 지역변수가 사라지지만, yield를 사용하면 내부값이 보존
- iterable(가장 큰 클래스)
- iterator(iterable의 하위 클래스)
- generator(iterator의 하위 클래스)
ichi.pro 블로그, mingrammer's note
Generator
를 Coroutine
이라고 한다stackless
와 stackful
로 나뉜다.❓ Coroutine - Stackful Functions
❓ Generators - Stackless Functions
❗❗
send()
라는 메소드를 사용하며__next()__
라는 메소드와 동일하게 인자값을 받으며yield
로 평가된다.
yield
구문까지는 일단 진행해서 멈춘 상태여야 send()
를 호출할 수 있기 때문에 생성 즉시 next()
를 한 번 호출해야 한다Witeframe 블로그, Crucian Carp 블로그
클래스는 최소 2개(
__init__()
,send()
)의 메소드를 정의해야한다. 하지만 코루틴은 하나의 함수만 정의한다. 🤔
따라서 다음과 같은 경우 코루틴이 유리하다.
Wireframe 블로그, Jooyung Han 블로그
❗ Synchronous Programming : 동시에 일어나는 프로그래밍
❗ Asynchronous Programming : 동시에 일어나지 않는 프로그래밍
async coroutine
💘
async coroutine
은 주로 IO(input/output)가 많은 작업에 있어서 CPU가 노는 시간동안 ‘다른 일’을 하도록 해서 전체적인 수행 시간을 줄이고 성능을 끌어올려 비병목자원을 줄이고자 함에 출현함.
런루프를 통해서 대기하고 있는 작업 중 하나가 실행기회를 얻도록 한다.
디스크에 있는 파일을 액세스하거나 네트워크 소켓을 액세스하는 시간동안 다른 작업을 처리해서 마치 동시에 여러 작업을 처리하는 것 같은 효과를 낸다.