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개의 댓글

Powered by GraphCDN, the GraphQL CDN