한 애플리케이션에 여러개의 프로세스를 구성하여, 각 프로세스가 하나의 작업을 처리한다.
장점
1) 안정성이 좋다
2) 여러개의 자식 프로세스 중 하나에 문제가 생겨도, 다른 자식 프로세스에 영향이 확산되지 않는다
ex) 크롬 브라우저에 여러개의 탭을 띄우고 여러 웹사이트 방문시 한 탭이 잘못되어도, 해당 탭만 이용못하고 다른 탭은 별 문제가 없다.
3) 각 프로세스들이 독립적으로 동작하여 자원이 서로 다르게 할당 된다.
단점
1) 메모리 사용량이 많다.
2) 프로세스간 자원 공유가 필요할시 IPC(Inter-Process Commnuication)를 사용IPC : 프로세스 사이의 어렵고 복잡한 통신 기법, 파이프, 소켓, 메세지큐 등을 이용
3) context switching에 의한 성능 저하의 우려가 존재한다.
-- CPU 메모리 검색(다음 프로세스 정보 불러오기)
-- CPU 캐시 메모리 초기화
-- 프로세스 상태 저장
-- 등등..
한 애플리케이션에 여러개의 쓰레드를 구성하여, 각 쓰레드가 하나의 작업을 처리한다. ex) 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리하도록 하는 행위 . 웹서버
웹 브라우저의 단일 탭/창 내에서 브라우저 네트워크 처리, I/O 및 기타 작업을 관리하고 처리
장점
1) 자원 공유가 쉽다.
2) 시스템의 자원 소모가 감소하므로 프로세스를 할당하는 것보다 쓰레드를 할당하는 것이 비용이 적다
3) 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다-> 프로세스 간의 전환 속도보다 쓰레드 간의 전환 속도가 빠르다.
4) 스레드가 프로세스보다 가벼움
-- 데이터 용량
-- 생성 및 종료
5) 프로세스간 통신(IPC)를 사용하지 않고도 데이터 공유 가능
6) 컨텍스트 스위칭 오버헤드 존재하지만 상대적으로 프로세스의 컨텍스트 스위칭 오버해드보다 훨씬 비용이 낮다
-- 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만 교체
7) 응답 시간이 빠르다
단점
1) 하나의 스레드에서 문제가 발생하면 다른 스레드들도 영향을 받아 전체 프로그램이 종료될 수 있다.
2) 쓰레드풀을 이용해 잔여 쓰레드를 가져와서 종료를 방지할 수 있지만, 새로운 쓰레드 생성이나 놀고 있는 쓰레드 가져오는 것에 대한 추가 비용 발생
3) 동기화 문제 발생 ( 공유 자원 )
4) 데드락 문제 발생
5) 그래도 context switching overhead 문제는 존재