본문 바로가기

TIL

[TIL 2024. 05. 07] 멀티스레딩과 멀티프로세싱

 

  • 멀티프로세싱: 크롬탭을 여러개 띄워두고 사용
    • 각 크롬탭은 별도의 프로세스에서 실행됨→ 어느 하나의 탭에서 문제가 발생해도 다른 탭에 영향이 없음
  • 멀티스레딩: 하나의 크롬탭 내에서 여러가지 작업 처리
    • 쇼핑(검색)
    • 다운로드
    • 동영상 재생
    • 페이지 스크롤,클릭

멀티스레딩과 멀티프로세싱은 동시에 여러 작업을 처리하는 방식이지만, 그 구현 방식특징에는 차이가 있다.

  1. 멀티스레딩(Multithreading):
    • 멀티스레딩은 하나의 프로세스 내에서 여러 개의 스레드를 생성하여 동시에 여러 작업을 처리하는 방식이다.
    • 스레드 간 데이터를 공유할 수 있으므로, 자원 공유가 용이하고 메모리 공간 및 시스템 자원을 적게 사용한다. (자원사용에 효율성)
    • 작업이 독립적이지 않은 경우에는 여러 스레드 간의 동기화 문제가 발생할 수 있다.
      • 한 스레드에서 발생한 문제가 다른 스레드에까지 영향을 미칠 수 있다
    • GIL(Global Interpreter Lock)로 인해 파이썬에서 CPU-bound 작업의 병렬 처리에 제약이 있을 수 있다.
  2. 멀티프로세싱(Multiprocessing):
    • 멀티프로세싱은 여러 개의 프로세스를 생성하여 각각의 프로세스가 독립적으로 실행되는 방식이다.
    • 각 프로세스는 자체 메모리 공간을 가지므로 데이터 공유가 어렵지만, 독립적으로 실행되기 때문에 하나의 프로세스에서 문제가 발생해도 다른 프로세스에 영향을 주지 않는다.
    • 메모리 공간을 별도로 사용하므로 멀티스레딩에 비해 메모리 사용량이 많고, 프로세스 간 통신(IPC, Inter-Process Communication)을 위한 추가적인 비용이 발생할 수 있다.
    • 하나의 프로세스가 다운되더라도 다른 프로세스는 계속해서 동작할 수 있어 안정성이 높다.

장단점 :

  • 멀티스레딩은 자원 공유가 용이하고 메모리 사용량이 적지만, 동기화 문제와 GIL로 인한 성능 제약이 있다.
  • 멀티프로세싱은 독립적인 실행 환경을 제공하여 안정성이 높지만, 메모리 사용량이 많고 프로세스 간 통신에 비용이 발생할 수 있다.
  • 그럼에도 우리가 멀티스레딩을 더 많이 쓰는 이유
    1. 자원 공유의 효율: 멀티스레드는 같은 프로세스 내에서 실 행되므로 자원 공유가 쉽습니다. 스레드 간의 통신이 단순하고 빠르며, 메모리 공간과 시스템 자원을 적게 소비한다.
    2. 경량화: 프로세스에 비해 경량화. 스레드의 생성,관리,전환에 오버헤드가 적다
    3. 작업 처리 속도: 멀티스레드는 프로세스 간의 컨텍스트 전환보다 스레드 간의 컨텍스트 전환 비용이 낮기 때문에 작업 처리 속도가 더 빠를 수 있다.
    4. 응답성 향상: 멀티스레드를 사용하면 여러 작업을 동시에 처리할 수 있어 응답성이 향상될 수 있다. -> GUI 프로그램에서 사용자 인터페이스 응답성을 높일 때 유용함
    그러나 멀티스레드를 사용할 때는 동기화 문제와 GIL(Global Interpreter Lock) 등의 제약을 고려해야 하고, 멀티프로세스는 여러 CPU 코어를 활용하여 병렬 처리를 할 수 있으므로 CPU-bound 작업에 더 적합할 수 있다. 즉,  상황에 따라 멀티프로세스를 선택하는 것이 더 적합할 수도 있다.