multi-thread

  • program? 특정 작업을 수행하는 일련의 명령의 집합
  • process? 실행중인 program
    • process는 메모리 공간과 1개 이상의 thread를 지닌다.
  • multi-thread
    • 하나의 프로세스에서 여러 개의 thread를 생성해 병렬 처리를 수행하는 기능
    • 멀티코어 환경에서 여러 개의 thread를 생성하여 작업을 처리하면 수행 시간을 줄일 수 있다.
    • C++, C에서는 thread끼리의 동기화를 위한 mutex, semaphore 등이 제공된다.

 

파이썬에서의 multi-thread

  • 파이썬에서는 multi-thread를 한다고해서 성능이 향상되지 않으며 경우에 따라 느려질 수 있다.
  • 그 이유는 GIL (전역 인터프리터 락) 때문이다.

파이썬 최초 공식 구현체인 CPython은 개발 초기에

  • 번거러운 동시성 관리를 편하게 하고,
  • thread safe하지 않는 CPython의 메모리 관리를 쉽게 하기 위해

GIL로 파이썬 객체에 대한 접근을 제한하는 형태로 설계하였다.

 

 

따라서 우리가 기대하기를 multi-thread를 사용하면

와 같이 동작할 것이라고 생각했지만, 

 

파이썬에서는 GIL을 사용하기 때문에 위와 같이 동작한다.

thread가 자원을 독점하는 형태로 실행되는 것이다.

 

CPython 개발이 시작되던 1994년 당시, CPU가 하나였던 시기이기에 이러한 선택에 대해 이해는 된다.

하지만 지금처럼 멀티 코어가 당연한 세상에서 하나의 thread가 자원을 독점하는 형태로 실행되는 제약은 매우 치명적이다.

최근들어 한계를 극복하기 위한 다양한 시도를 하고 있지만, GIL에 의존하는 형태로 구현된 기능이 대부분을 차지하여 쉽지 않다.

지금까지도 GIL은 파이썬의 주요 특징으로 남아있다.

 

 

 

* 참고

+ Recent posts