Closure와 같은 것들Generator(제너레이터) : Iterator를 리턴(생성)하는 함수, yield를 사용하며 메모리 적재 방식에서 Iterator와 차이가 있다
Iterator(이터레이터) : 반복 가능한 객체
단순히
yield를 쓰냐 안쓰냐의 차이도 있지만.
- 가장 큰 차이점은
- Generator(제너레이터)는 각각의
yield에서 한번 실행 시킨 후 대기 상태에 들어가 결과를 반환, 이후 다음 코드를 진행하여 또 다시yield를 만날 경우 대기 상태에 들어가 결과를 반환하는 방식- Iterator(이터레이터)는 모든 동작은 완료한 후 결과를 한번에 메모리 적재하는 방식
파이썬 반복 가능한 타입(iterable)
collections, textfile, list, dict, set, tuple, unpacking, *args, iterable하게 구현된 클래스 등단일(싱글) 스레드.스택을 기반으로 동작하는 비동기 작업yield, send를 통해 메인 <-> 서브overhead 감소(단일 스레드에서 진행하기 때문에 상태를 저장하는 등의 작업을 수행하는 overhead가 필요 없다.)교착 상태나 Context Switching 비용이 생기며, 자원 소비 가능성 증가.비동기 작업 수행
지연 시간(Block) CPU 및 리소스 낭비 방지 -> (File)Network I/O 관련 작업 -> 동시성 활용 권장(제어권을 다른 데 넘겨서 다른 작업 수행하기 위해서.)
비동기 작업에 적합한 프로그램일 경우 압도적으로 성능 향상
Futures
import threading, multiprocessing 둘 다 사용해야 했으나 편리하게 변경됨.GIL(Global Interpreter Lock)
GIL이 실행된다GIL이 실행되면 -> 리소스 전체에 Lock이 걸린다. Context Switching 비용도 발생하므로 멀티 스레드를 사용하는 것이 싱글 스레드를 사용하는 것보다 오히려 효율이 떨어지는 경우가 발생할 수 있다.mapwait, as_completedconvoy effect나 fail등을 세부적으로 관리할 수 있어야 한다.wait : timeout을 줄 수 있다. as_completed : 먼저 처리된 것을 바로 처리할 수 있다.