[python] generator / GIL

📝 1yangsh·2021년 6월 30일
0

generator

Generator는 iterator 를 생성해주는 함수로, 함수 안에 yield 키워드를 사용함.

  • iterator는 next() 메소드를 사용해 데이터를 순차적으로 접근할 수 있는 함수.
  • Generator는 한번에 모든 데이터를 메모리에 적재할 필요가 없어서 메모리 효율이 높고, 계산 결과가 필요할 때까지 계산을 늦출 수 있으므로, 수행 시간이 긴 연산을 필요한 순간까지 늦출 수 있다는 장점을 가지고 있음.

GIL

GIL은 한번에 하나의 스레드만 수행할 수 있도록 인터프리터에 lock을 거는 기능

  • 파이썬 객체는 Garbage Collection 기능을 위해, reference count를 가지고 있는데, 해당 객체를 참조할 때마다 reference count 값을 변경해야 함.
  • 멀티 스레드를 실행하게 되면, 각 스레드가 공유하는 객체들에 대해 각각 lock을 거는 경우, 성능상 이슈와 deadlock 과 같은 위험이 존재하며, 인터프리터 레벨에서 한 시점에 실행하는 스레드는 1개로 제한한 것이다. 그래서 멀티 CPU 환경이라 할지라도, 파이썬 스레드는 어느 시점에나 1개의 스레드가 실행되는 단점이 있다.
  • 이를 해결하려면 multiprocessing 라이브러리를 사용해야한다. 이 경우 개별 프로세스가 생성되고, 프로세스 별로 인터프리터 락이 걸리기 때문에, 동시 실행이 가능하다.
profile
개발 경험 저장소

0개의 댓글