# 14. TIL

이지훈·2021년 5월 25일
0

TIL

목록 보기
14/33
post-thumbnail

1. iterator

  • iterator란 값 생성기
  • iteratornext()를 호출할 때 다음 값을 생성해내는 상태를 가진 헬퍼 객체

즉, 값을 요청할 때마다 내부 상태를 일정하게 유지하고 있기 때문에 다음값(next)를 계산하는 방법을 알고 있다.

iterator는 next()를 호출할 때마다 두가지의 작업을 수행한다.

  • 다음 계산을 위한 next() 호출을 위해 상태를 변경
  • 현재 호출에 대한 결과값을 생성

서기리보이 블로그, mingrammer's note


2. Generator

  • generatoriterator를 만드는 도구
  • return 대신 yield로 반환
  • next() 메서드가 호출되면 중단된 지점부터 다시 시작(모든 데이터값과 '마지막' 실행 명령문을 기억)

즉, retrun을 사용하면 내부 지역변수가 사라지지만, yield를 사용하면 내부값이 보존

  1. iterable(가장 큰 클래스)
  2. iterator(iterable의 하위 클래스)
  3. generator(iterator의 하위 클래스)

ichi.pro 블로그, mingrammer's note


3. Coroutine

  • 값을 입력받을 수 있는 GeneratorCoroutine이라고 한다
  • 쓰레드의 대안이 아니라 기존의 쓰레드를 더 작게 쪼개쓰기 위해 탄생
  • 서브 루틴, 일종의 저비용 쓰레드(경량 쓰레드)
  • stacklessstackful로 나뉜다.

❓ Coroutine - Stackful Functions

  • Coroutine 내부 함수에서 Yield(Suspending the Coroutine) 호출 가능

❓ Generators - Stackless Functions

  • Coroutine 내부 함수에서 Yield(Suspending the Coroutine) 호출 불가능

❗❗ send()라는 메소드를 사용하며 __next()__라는 메소드와 동일하게 인자값을 받으며 yield로 평가된다.

  • 코루틴에서 주의해야 할 것은 yield 구문까지는 일단 진행해서 멈춘 상태여야 send()를 호출할 수 있기 때문에 생성 즉시 next()를 한 번 호출해야 한다

Witeframe 블로그, Crucian Carp 블로그


4. Class 말고 Coroutine을 사용해야할 때

클래스는 최소 2개(__init__(), send())의 메소드를 정의해야한다. 하지만 코루틴은 하나의 함수만 정의한다. 🤔

따라서 다음과 같은 경우 코루틴이 유리하다.

  • 표준 예외 클래스가 필요할 때
  • 메소드 하나 있는 클래스라서 함수로 바뀌는 것이 더 나은 경우
  • 한 개의 인스턴스만 만들 경우

Wireframe 블로그, Jooyung Han 블로그


5. sync(동기) / Async(비동기) 프로그래밍

❗ Synchronous Programming : 동시에 일어나는 프로그래밍

  • 요청과 결과가 한 자리에서 동시에 일어남

❗ Asynchronous Programming : 동시에 일어나지 않는 프로그래밍

  • 요청한 그 자리에서 결과가 나오지 않음
  • ex) async coroutine

💘 async coroutine은 주로 IO(input/output)가 많은 작업에 있어서 CPU가 노는 시간동안 ‘다른 일’을 하도록 해서 전체적인 수행 시간을 줄이고 성능을 끌어올려 비병목자원을 줄이고자 함에 출현함.

  1. 코루틴은 yield 키워드를 만날 때마다 실행하던 것을 멈추고 다른 일을 하는데, 이 때 문맥의 전환은 자신의 send()를 호출한 곳으로 돌아가게 된다.
  1. 런루프를 통해서 대기하고 있는 작업 중 하나가 실행기회를 얻도록 한다.

  2. 디스크에 있는 파일을 액세스하거나 네트워크 소켓을 액세스하는 시간동안 다른 작업을 처리해서 마치 동시에 여러 작업을 처리하는 것 같은 효과를 낸다.

공부해서 남 주자 블로그, Wireframe 블로그, 초보몽키의 개발공부로그

profile
꾸준하게 🐌

0개의 댓글