본문 바로가기
공부

파이썬의 GC, GIL

by GGT 2020. 5. 27.

파이썬의 GIL

파이썬은 기본적으로 자바와 같이 가비지컬렉터에 의해 메모리가 관리된다.

여기서 파이썬은

  • 순환 참조
  • Reference count

를 이용해 메모리를 관리한다.

>>> import sys
>>> a = []
>>> b = a
>>> sys.getrefcount(a)
3 

Reference count의 값이 0이 되면 더이상 참조되지 않음으로 판단하고

해당 객체는 메모리에서 해제된다.

여기서 만약 멀티스레드 환경이 된다면?

해당 Ref.count 값은 임계영역에 존재하게 되며 이를 동기화하지 않으면 사용하는 객체까지 해제될 수 있다.

그렇기에 파이썬은 GIL을 사용한다.

인터프리터의 자체적인 Lock을 획득해야하만 바이트 코드를 실행할 수 있기 때문에

자체적으로 싱글스레드 환경으로 만들어버린다.

해결책은?

  • I/O-bound가 큰 상황에서만 멀티 스레드를 활용
  • 아니면 멀티프로세싱을 이용
  • 그냥 파이썬답게 싱글스레드 쓰자
반응형

'공부' 카테고리의 다른 글

REST API  (0) 2020.05.28
HTTP와 HTTPS  (0) 2020.05.28
기술 면접 준비 - 자바  (0) 2020.05.27
끝이 안보이는 기사 공부  (0) 2020.05.13
마크다운과 Notion 적응기  (0) 2020.04.29

댓글