[python] multi processing VS threading

ad_official·2025년 6월 5일
0

python

목록 보기
1/2

입출력 작업을 병렬로 하고 싶으면, 멀티쓰레딩

  • 여러 작업자가 같은 파일을 동시에 읽어야 할 때는 멀티스레딩이 더 적합합니다.
  • 한 스레드가 입출력 작업을 기다리는 동안 GIL이 풀리기 때문에,
    • 다른 스레드가 CPU 계산이나 다른 I/O 작업을 계속 수행할 수 있습니다.

이유

  • 메모리 공유:
    • 스레드는 하나의 프로그램 안에서 메모리를 함께 쓰기 때문에,
    • 파일을 한 번만 열어 두면 같은 데이터를 여러 스레드가 그대로 꺼내 쓸 수 있습니다.
  • 캐시 활용:
    • 운영체제가 “한 번 읽어온 파일 블록”을 메모리에 저장해 두면,
    • 다른 스레드가 같은 부분을 읽을 때 디스크를 다시 읽지 않고 메모리 캐시를 바로 활용합니다.
  • 반면 멀티프로세싱
    • 각 프로세스가 독립적으로 메모리를 가져서, 동일한 파일을 여러 번 열고 읽어야 합니다.
    • 이때 디스크에 동시에 여러 번 접근하면서 입출력 대기 시간이 늘어납니다.


입출력 작업(I/O 중심 작업)이 뭔데?

  • 프로그램이 “외부 장치와 데이터를 주고받는 일” 때문에 대부분 시간을 보내는 경우를 말해요.
    • 예를 들어:
  • 파일 복사:
    • 큰 동영상 파일을 복사할 때, 하드디스크에서 읽고 또 쓰는 데 시간이 더 오래 걸리죠.
  • 웹에서 이미지 다운로드:
    • 서버에서 이미지가 도착할 때까지 기다리는 시간이 길어요.
  • 데이터베이스 조회:
    • DB 서버에서 결과가 돌아올 때까지 멈춰 있는 시간이 많습니다.
  • 이런 작업은 내부 계산(숫자 연산)을 빠르게 끝내더라도, 외부 I/O를 기다리느라 실제로 프로그램이 쉬는 시간이 많아요.
  • 그래서 “CPU를 바쁘게 쓰느냐, 아니면 외부 장치를 기다리느냐”로 구분할 때, 후자에 해당하는 작업을 I/O 중심 작업이라고 부릅니다.


GIL(Global Interpreter Lock)?

  • 파이썬 인터프리터
    파이썬으로 쓴 코드를 한 줄씩 읽어서 바로 실행하는 프로그램입니다. 따로 변환 과정을 거치지 않기 때문에, 코드를 쓰고 바로 실행해 볼 수 있습니다.

  • GIL
    파이썬 인터프리터 안에 있는 잠금 장치로, 한 번에 하나의 스레드만 파이썬 코드를 실행할 수 있게 합니다. 계산 위주의 작업은 동시에 처리되지 않지만, 파일 읽기나 네트워크처럼 기다리는 일이 많을 때는 잠금이 풀려서 다른 스레드가 실행됩니다.

  • 멀티 프로세싱과 GIL의 관계
    멀티 프로세싱은 파이썬 프로그램(인터프리터)을 독립된 여러 프로세스로 나눠 실행하는 방식입니다. 각 프로세스는 자체 파이썬 인터프리터와 GIL을 가지므로, 한 프로세스가 잠겨 있어도 다른 프로세스는 영향을 받지 않고 동시에 계산을 할 수 있습니다.

profile
ad_official

0개의 댓글