본문 바로가기

개발자 레니는 지금 -/소프트웨어와 함께

[ Python ] Thread와 Multiprocessing 차이점



Python

Thread와 Multiprocessing 차이점








 시작 전 테스트환경 살피기

   Time

    2017년 08월 18일

   OS

    Linux(Ubuntu 16.04 LTS)

   Language

    Python 2.7



Python은 Thread를 이용한 병렬처리보다 process를 이용한 병렬처리를 더 선호한다. Thread들이 같이 공유하는 변수들에 대한 접근을 막기 위해 전체 변수들을 묶어 한번에 하나의 Thread만 일하는 방식( GIL )을 차영하였기 때문에 Multiprocess로 작업한느 것이 실행속도가 빠르다.




Treading



장 점


  • 메모리가 적게 필요함

  • 메모리를 공유함 ( 서로 상태를 공유하기 쉽다 )

  • GIL을 이용해 병렬 처리가 가능

  • I/O bound 애플리케이션에 옵션이 많다.


단 점


  • interrupt/kill 할 수 없음

  • command queue/message pump 모델을 따르지 않는 경우 동기화 해야 한다.

  • race condition이 발생할 수 있다.

Multiprocessing


        

multiprocessing 모듈은 threading API에 기반을 두고 여러 프로세스 간 작업을 나누는 API를 제공한다.

multiprocessing은 threading 대신 사용해 multi core CPU의 장점을 누리고 Python의 global 인터프리터 lock의 병목현상을 피하게 할 수 있다.



장 점


  • 메모리를 공유하지 않는다.

  • 코드 흐름이 명확하다.

  • Multi core/CPU의 장점을 쓸 수 있다.

  • shared memory를 쓰지 않는 이상 동기화가 필요 없다.

  • 자식 프로세스를 interrupt/kill 할 수 있다.

  • Python의 multiprocessing 모듈이 제공하는 다양한 interface 기능을 사용할 수 있다.


단 점


  • IPC( Inter Process Communication )에서 오버헤드가 좀더 크다.

  • 메모리가 더 많이 필요하다.







 참조내용


1. Python에서 thread를 사용하지 마세요?


Feat. Python study 천나겸 [ E-mail : khellantz@gmail.com ]