프로세스 vs 쓰레드 는 개발자 면접에서 자주 나오는 질문 중의 하나!
OS 는 Process 마다 독립된 메모리 영역을 Code/Data/Heap/Stack 의 형식으로 할당
Thread 는 그 개수에 따라, Single thread(스레드 1개)/Multi thread(스레드 2개 이상) 로 구분
Process 내부에는 최소 하나의 Thread 를 가지고 있는데, 실제로는 Thread 단위로 스케줄링을 한다.
프로세스
참고: 프로세스 (Process)
멀티 프로세스
참고: 멀티 프로세스
쓰레드
참고: 쓰레드 (Thread)
멀티 쓰레드
참고: 멀티 쓰레드
음악을 들으면서, 웹서핑을 하고, 메신저의 메시지를 확인할 수 있는 이유는 컴퓨터 내부적으로 프로세스와 스레드를 동시에 처리하는 멀티 태스킹
(multi tasking)Visit Website 기술 때문이다.
멀티 태스킹 원리
Process 는 한 번 CPU 를 사용할 때, 아주 짧은 시간(quantum)만 실행되도록 하여
각 프로그램의 작업을 아주 작은 단위로 번갈아 가며 처리하면서 작업 응답 시간을 최소화시키는 방법을 사용
이때, 잘게 나뉘어진 Process 끼리 작업이 Switching 되는 것을 문맥 교환(Context Switching) 이라고 한다.
여러 작업을 동시에 처리하는 것처럼 보이게 만들어, 사용자에게 더 빠른 반응성을 제공한다.
사용자는 동시에 프로그램이 실행되는 것처럼 느껴 차이를 못 느끼게 된다.
작업을 나누었기 때문에 예기치 않은 문제가 발생했을 때, 해당 작업만 중지할 수 있게 된다.
따라서, 전체 시스템이 멈추는 것을 방지할 수도 있다.
멀티 프로세싱 또는 멀티 코어를 사용하는 시스템에서 여러 개의 프로세서(CPU)가 동시에 작업을 효율적으로 처리할 수 있다.
프로세스 간의 우선순위를 조절이 수월해진다.
우선순위가 높은 작업은 더 자주 실행되어, 더 빠른 처리를 할 수도 있는 것이다.
응답성을 향상하기 위해서 그렇다고 Context Switching 이 자주 일어나게 될 경우, 오히려 성능 이슈가 발생할 수 있다.
왜냐하면 Process 끼리 Switching 하는 작업은 상당히 무거운 작업에 해당하기 때문이다.
두 Switching 모두 멀티태스킹 환경에서 여러 Process 또는 Thread를 동시에 실행하기 위한 기술
Thread Context Switching 이 Process Context Switching 보다 더 빠르다.
CPU 캐쉬 메모리?
Process Context Switching 의 경우
Thread Context Switching 의 경우
언제 발생?
스레드 간에 경쟁 조건 (race condition)
예시
Process는 기본적으로 독립된 공간이지만, 공유 자원을 사용하는 경우에 똑같이 경쟁 조건이 발생 할 수가 있다.
따라서 자원 동기화 문제을 해결하기 위해선 각 상황에 적절한 공유 자원에 대한 동기화 메커니즘이 필요해진다.
참고: [운영체제] 프로세스와 스레드
참고: JAVA 쓰레드란(Thread) ? - JAVA에서 멀티쓰레드 사용하기
참고: [Java] 멀티 스레드
참고: [Java] 멀티 스레드환경의 동시성 이슈 그리고 해결방법
참고: [Java] Multi Thread환경에서 동시성 제어를 하는 방법
참고: ThreadLocal 이란 ?
참고: 메모리의 구조
참고: 시스템 메모리 구조 코드/데이터/스택/힙 영역 정리
참고: 힙 영역 vs 스택 영역
참고: 메모리영역 ( 코드 영역 , 데이터 영역 , 힙 영역 , 스택 영역)
참고: 완전히 정복하는 프로세스 vs 스레드 개념
참고: 멀티 태스킹 & 멀티 프로세싱 개념 한방 정리