Multi Processing & Threading

About_work·2022년 12월 12일
0

process, thread

목록 보기
9/23

용어 정리

  • fan out: 각 작업 단위에 대해, 동시 실행되는 여러 실행흐름을 만들어 내는 것
  • fan in: 전체를 조율하는 프로세스 안에서, 다음 단계로 진행하기 전에 동시 작업 단위의 작업이 모두 끝날 때까지 기다리는 과정

Multi processing

  • 특징
  • parallel
  • concurrent
  • 장점
  • 서로 격리되고 leverage가 큰 유형의 작업들을 처리할 때
    - 격리: 프로그램의 다른 부분과 상태를 공유할 필요가 없는 함수를 실행한다는 뜻
    • 레버리지: 부모와 자식 사이에 주고받아야 하는 데이터 크기는 작지만, 이 데이터로 인해 자식 프로세스가 계산해야 하는 연산의 양이 상당할 때
  • 여러 CPU/GPU로 연산 가능
  • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면, 그 자식 프로세스만 죽는 것으로 해결할 수 있다.
  • 단점
  • 메모리 공유가 불가능
  • context switching 에서의 overhead
    - 무거운 작업이 진행되어 많은 시간이 소요된다.
    • CPU 레지스터 교체, RAM-CPU 사이의 캐쉬 메모리에 대한 데이터 초기화 필요
    • 참고: context switching?
      1. 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 context를 보관하고,
      2. 대기하고 있던 다음 순서의 프로세스가 동작하면서, 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

Multi Threading

  • 특징
  • 장점
  • blocking I/O 를 parallel 하게 처리할 수 있다.
  • 파일 여러 개 읽고/쓰는데 적합하다.
  • 리펙토링이 쉽다.
  • 메모리 공유 가능: 통신이 빠르다.
  • 자원의 효율적 관리
  • 단일 CPU/GPU로 연산 가능
  • 단점
  • 공유 리소스에 동시에 접근하는 경우를 잘 고려햐여 Lock을 걸어야 한다.
  • Lock을 자주 쓰면, 코드가 읽기 어려워져 복잡해지고, 시간이 지남에 따라 스레드를 사용한 코드를 확장하고 유지 보수하기도 더 어렵다.
  • 단일 CPU/GPU 연산만 가능
  • GIL(Global Interpreter Lock, 여러 thread가 있어도 CPU 자원을 사용할 수 있는 스레드는 1개) 때문에 parallel 연산 불가
  • I/O
  • I/O는 데이터 Input Ouput
  • 어떤 디바이스를 통해 입력과 출력이 이뤄지는 작업을 전부 I/O라고 합니다.
  • I/O 에서 발생하는 시간은, CPU 대기 시간에 속합니다.
  • 예시: 파일 읽거나 쓰기, 네트워크와 데이터 주고 받기(소켓 통신 등), 디스플레이 장치와 통신하기 등
  • blocking I/O
  • I/O 작업이 진행되는 동안, user process가 자신의 작업을 중단한 채, I/O가 끝날 때까지 대기하는 방식을 의미한다.
  • 호출되는 I/O 함수가 제어권을 가져가서 block 하는 경우
  • blocking I/O는 파이썬이 특정 시스템 콜을 사용할 떄 일어남
  • 시스템 콜을 이용하여, OS가 자기 대신 외부 환경과 상호 작용하도록 의뢰한다.
  • blocking I/O를 왜 multi threading으로 해결 가능?
  • 파이썬 thread가 시스템 콜을 하기 전에 GIL을 해체하고, 시스템 콜에서 반환되자 마자 GIL을 다시 획득하기 때문
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글