Dev Language/Python

[파이썬_4] #1. 프로세스(process) vs 스레드(thread) and GIL(Global Interpreter Lock)

ydin 2021. 12. 2. 12:23
  • 공부한 날짜: 2021.12.01

 

  • Multithreading - Difference between Process and Thread
  • Keyword- Process, Thread

 

***프로세스와 스레드의 차이 정확히 알아두기& 운영체제에 포함되어 있는 프로세스 정확히 알고 답변할 줄 알아야한다(기술 면접대비)

 

  1. 프로세스
  • -운영체제에서 할당받는 자원 단위(실행 중인 프로그램) ->>>> 외워!!
  • -CPU 동작 시간, 주소 공간은 독립적이다. 
  • -최소 1개의 메인 스레드 보유
  • -파이프, 파일, 소켓 등을 사용해서 프로세스간 통신(cost 높음)-> Context Swtiching(문맥교환)

 

 

2. 스레드 

  • 프로세스 내에 있는 실행 흐름 단위
  • 프로세스 자원을 사용함
  • Stack만 별도 할당. 나머지는 공유(Code, Data, Heap)
  • 메모리 공유(변수 공유)
  • 한 스레드의 결과가 다른 스레드에 영향을 끼친다 
  • 동기화 문제는 정말 주의(디버깅 어려움)

 

3. 멀티 스레드

  • 한 개의 단일 어플리케이션(응용프로그램)-> 여러 스레드로 구성 후 작업 처리
  • 시스템 자원 소모 감소(효율성), 처리량 증가(Cost 감소)
  • 통신 부담 감소, 디버깅 어려움, 단일 프로세스에는 효과가 미약함, 자원 공유 문제(교착상태), 프로세스에 영향을 준다 

 

4. 멀티 프로세스

  • 한 개의 단일 어플리케이션(응용프로그램)-> 여러 프로세스로 구성 후 작업 처리 
  • 한 개의 프로세스 문제 발생은 확산 없음(프로세스 kill)
  • 캐시 체인지, cost 비용 매우 높음(오버헤드), 복잡한 통신 방식 사용 

 

5. GIL(Global Interpreter Lock)

  • CPython -> Python(bytecode) 실행 시 여러 thread 사용할 경우 단일 스레드만이 Python object에 접근하게 제한하는 mutex가 있음 
  • CPython 메모리 관리라 취약하기 때문에(Thread-safe) 단일 스레드만으로도 충분히 빠르다
  • 프로세스 사용 가능(Numpy/Scipy)등 외부 영역에서 효율적인 코딩 
  • 병렬 처리는 MultiProcessing, asyncio등 선택지가 다양하다
  • thread 동시성 완벽 처리를 위해 Jython,IronPython,Stackless Python 등이 존재 

 

-리소스 가장 적게 잡아먹고, 안정적으로 동작하는 방식으로 멀티프로세싱을 작성해야한다