Skip to content

Latest commit

 

History

History
109 lines (68 loc) · 4.21 KB

README.md

File metadata and controls

109 lines (68 loc) · 4.21 KB

멀티 프로세스와 멀티 스레드

멀티 프로세스

개념

  • OS에서 하나의 프로그램이 동시에 여러 프로세스를 실행하는 기술
  • 보통은 한 프로그램 당 한 프로세스이지만, 부가 기능을 위해 여러 프로세스 활용

장점

  • 안정성: 한 프로세스의 비정상 종료가 다른 프로세스에 영향을 미치지 않음
  • CPU 코어 활용 최적화: CPU 연산 집약적인 작업에 효율적

단점

  • 컨텍스트 스위칭 비용: 메모리 초기화 작업으로 인해, 스레드의 컨텍스트 스위칭에 비해 더 큰 비용
  • 메모리 사용량 증가: 각 프로세스는 독립적인 메모리 공간을 가지므로 전체 메모리 사용량이 높아짐

⇒ CPU 바운드 작업에 유리

멀티 스레드

개념

  • 프로세스 내부의 실행 흐름이며, 하나의 프로세스에 여러 스레드가 있는 환경
  • 많은 OS에서 멀티 프로세스를 지원하지만, 멀티 스레딩을 기본으로 함

장점

  • 자원 효율성: 프로세스의 자원을 공유하기 때문에 실행 환경 생성 및 종료가 빠름, 데이터 용량도 적게 차지
  • 컨텍스트 스위칭 비용: 스레드 정보만 교체하면 되므로 상대적으로 적은 비용
  • 응답 시간 단축: 프로세서를 생성해서 처리하지 않으므로 오버헤드 감소

단점

  • 안정성: 하나의 프로세스에서 발생한 문제가 다른 스레드에도 영향을 줄 수 있음
  • 동기화: 여러 스레드가 공유 자원에 접근하므로 동기화 작업이 필요한데, 이 작업으로 인해 성능이 저하될 수 있음

⇒ I/O 바운드 작업에 유리

Reference

동기와 비동기의 차이

동기(Synchronous)

  • 요청을 보낸 후 응답이 올 때까지 Blocking 상태로 대기하는 방식
  • 모든 작업을 순차적으로 처리
  • 작업의 순서가 반드시 유지되어야 하는 경우에 사용됨

비동기(Asynchronous)

  • 요청을 보낸 후 응답을 기다리지 않고 Non-Blocking 방식으로 다음 작업 수행
  • 요청의 병렬 처리 가능
  • callback, promise, async/await 등의 구조를 활용하므로 로직의 복잡도 증가
  • I/O 작업에 주로 사용됨
    • HTTP 요청, 파일 입출력 등

유저 모드와 커널 모드

user-and-kernel-mode

User Mode

개념

  • 애플리케이션 프로그램이 가동되는 제한된 환경
  • 프로그램이 실행될 때 OS가 분리된 프로세스 및 메모리 영역 할당
  • 하드웨어 및 커널 메모리에 직접 접근할 수 없고, 커널에 시스템 콜을 해서 요청해야 함
  • 에러 및 충돌은 전체 시스템에 영향을 끼치지 않음

장점

  • 개별적 애플리케이션 환경이기 때문에 디버깅이 쉽고, 에러도 전파되지 않음
  • 커널에서 요청에 대한 인증 수행 가능
  • 다른 애플리케이션의 메모리를 오염시킬 일이 없음

단점

  • 시스템 콜은 유저 모드/커널 모드 스위칭이 필요하며, 이로 인한 지연 발생
  • low-level 작업 수행 불가
  • 저지연 실행 환경이 필요한 경우 부적합

Kernel Mode

개념

  • CPU, 메모리, 저장 공간 등 모든 자원에 제한 없이 접근 가능한 모드
  • 유저 모드 프로그램이 하드웨어 접근 요청을 하면 커널 모드로 전환되며, 작업 실행 후에 다시 유저 모드로 되돌림
  • 전체 시스템에 영향을 미치는 명령어 수행 가능

장점

  • OS 개발자라면 파인 튜닝을 통해 성능을 끌어올릴 수 있음
  • 시스템 콜과 프로세스를 효율적으로 관리 가능
  • 멀티태스킹, 스레드 동기화, 컨텍스트 스위칭 작업 가능

단점

  • 버그 및 에러가 전체 OS를 다운시킬 위험 존재
  • 커널 코드의 버그는 추적 및 해결이 어려움
  • OS에 대한 깊은 이해도 필요

Reference