개념
- OS에서 하나의 프로그램이 동시에 여러 프로세스를 실행하는 기술
- 보통은 한 프로그램 당 한 프로세스이지만, 부가 기능을 위해 여러 프로세스 활용
장점
- 안정성: 한 프로세스의 비정상 종료가 다른 프로세스에 영향을 미치지 않음
- CPU 코어 활용 최적화: CPU 연산 집약적인 작업에 효율적
단점
- 컨텍스트 스위칭 비용: 메모리 초기화 작업으로 인해, 스레드의 컨텍스트 스위칭에 비해 더 큰 비용
- 메모리 사용량 증가: 각 프로세스는 독립적인 메모리 공간을 가지므로 전체 메모리 사용량이 높아짐
⇒ CPU 바운드 작업에 유리
개념
- 프로세스 내부의 실행 흐름이며, 하나의 프로세스에 여러 스레드가 있는 환경
- 많은 OS에서 멀티 프로세스를 지원하지만, 멀티 스레딩을 기본으로 함
장점
- 자원 효율성: 프로세스의 자원을 공유하기 때문에 실행 환경 생성 및 종료가 빠름, 데이터 용량도 적게 차지
- 컨텍스트 스위칭 비용: 스레드 정보만 교체하면 되므로 상대적으로 적은 비용
- 응답 시간 단축: 프로세서를 생성해서 처리하지 않으므로 오버헤드 감소
단점
- 안정성: 하나의 프로세스에서 발생한 문제가 다른 스레드에도 영향을 줄 수 있음
- 동기화: 여러 스레드가 공유 자원에 접근하므로 동기화 작업이 필요한데, 이 작업으로 인해 성능이 저하될 수 있음
⇒ I/O 바운드 작업에 유리
Reference
동기(Synchronous)
- 요청을 보낸 후 응답이 올 때까지 Blocking 상태로 대기하는 방식
- 모든 작업을 순차적으로 처리
- 작업의 순서가 반드시 유지되어야 하는 경우에 사용됨
비동기(Asynchronous)
- 요청을 보낸 후 응답을 기다리지 않고 Non-Blocking 방식으로 다음 작업 수행
- 요청의 병렬 처리 가능
- callback, promise, async/await 등의 구조를 활용하므로 로직의 복잡도 증가
- I/O 작업에 주로 사용됨
- HTTP 요청, 파일 입출력 등
개념
- 애플리케이션 프로그램이 가동되는 제한된 환경
- 프로그램이 실행될 때 OS가 분리된 프로세스 및 메모리 영역 할당
- 하드웨어 및 커널 메모리에 직접 접근할 수 없고, 커널에 시스템 콜을 해서 요청해야 함
- 에러 및 충돌은 전체 시스템에 영향을 끼치지 않음
장점
- 개별적 애플리케이션 환경이기 때문에 디버깅이 쉽고, 에러도 전파되지 않음
- 커널에서 요청에 대한 인증 수행 가능
- 다른 애플리케이션의 메모리를 오염시킬 일이 없음
단점
- 시스템 콜은 유저 모드/커널 모드 스위칭이 필요하며, 이로 인한 지연 발생
- low-level 작업 수행 불가
- 저지연 실행 환경이 필요한 경우 부적합
개념
- CPU, 메모리, 저장 공간 등 모든 자원에 제한 없이 접근 가능한 모드
- 유저 모드 프로그램이 하드웨어 접근 요청을 하면 커널 모드로 전환되며, 작업 실행 후에 다시 유저 모드로 되돌림
- 전체 시스템에 영향을 미치는 명령어 수행 가능
장점
- OS 개발자라면 파인 튜닝을 통해 성능을 끌어올릴 수 있음
- 시스템 콜과 프로세스를 효율적으로 관리 가능
- 멀티태스킹, 스레드 동기화, 컨텍스트 스위칭 작업 가능
단점
- 버그 및 에러가 전체 OS를 다운시킬 위험 존재
- 커널 코드의 버그는 추적 및 해결이 어려움
- OS에 대한 깊은 이해도 필요
Reference
