여러 개의 프로세스를 통해 두 가지 이상의 작업을 병렬적으로 수행하는 것
장점
- 안전성
(메모리 침범 문제를 OS 차원에서 해결
→ 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생하더라도 다른 프로세스 이용해 처리 가능)
단점
- 각각 독립된 메모리 영역을 갖고 있어 작업량 많을 수록 오버헤드 발생
- Context Switching으로 인한 성능 저하
e.g. 웹 브라우저
- 브라우저 프로세스: 주소 표시줄, 북마크 막대, 앞/뒤로 가기 버튼 등 담당,
네트워크 요청이나 파일 접근 같은 권한 담당
- 렌더러 프로세스: 웹 사이트가 ‘보이는’ 부분의 모든 것을 제어
- 플러그인 프로세스: 웹 사이트에서 사용하는 플러그인 제어
- GPU 프로세스: GPU를 이용해서 화면 그리는 부분 제어
- 프로세스 내 작업을 여러 개의 스레드로 처리하는 것
- 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
장점
- 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실 감소
- 전역 변수와 정적 변수에 대한 자료 공유 가능
- 동시성 - 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것
단점
- 안전성 문제 → 하나의 스레드가 데이터 공간 망가뜨리면 모든 스레드가 작동 불능 상태
- Critical Section 기법을 통해 대비
→ 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려 할 때
발생하는 문제를 해결하기 위한 동기화 과정
- `상호 배제, 진행, 한정된 대기` 충족해야 함
e.g. 웹 브라우저의 렌더러 프로세스