자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.
프로세스와 쓰레드
프로세스(process)란?
- 실행 중인 프로그램 하나를 의미합니다.
- 메모리 공간, 자원(resources: 파일, 입출력 등), CPU 등과 함께
- 최소 하나 이상의 쓰레드로 구성됨
정리: 프로세스 = 자원 + 쓰레드
쓰레드(thread)란?
- 프로세스 안에서 실제 일을 수행하는 실행 단위
- 프로세스 내부에서 작업을 수행하는 흐름
- 하나의 프로세스에는 최소 1개 이상의 쓰레드가 존재함 (1개 이상 → “1+”라고 표시되어 있음)
비유
- 프로세스 = 공장
- 쓰레드 = 일꾼
싱글 쓰레드 vs 멀티 쓰레드
싱글 쓰레드 프로세스
- 하나의 공장(프로세스)에 일꾼이 딱 한 명(쓰레드)
- 구성: 자원 + 쓰레드
멀티 쓰레드 프로세스
- 하나의 공장 안에 여러 명의 일꾼이 동시에 일하는 구조
- 같은 공장 안에 3명 이상 일꾼이 들어 있음
- "일꾼 n명", "멀티 쓰레드", "쓰레드 + 쓰레드 + …"
프로세스와 쓰레드 (3/3)
"새로운 프로세스를 생성하는 것보다 새로운 쓰레드를 생성하는 것이 더 저렴하다."
이유: 프로세스는 자원까지 포함하므로 비용이 큼, 반면 쓰레드는 자원 공유 구조이기 때문에 가볍다.
"2 프로세스 1 쓰레드"
- 공장 2개, 각각에 일꾼 1명씩 있음 → 2개의 싱글 쓰레드 프로세스
- "싱글 쓰레드 프로세스 x2"
- 비유: CGI 방식 (Common Gateway Interface)
"1 프로세스 2 쓰레드"
- 공장 하나에 일꾼 두 명이 있음 → 멀티 쓰레드 프로세스
- 필기: "멀티 쓰레드", "쓰레드 x2"
- 비유: Java Servlet (서블릿은 멀티 쓰레드 기반)
✔ 효율: 쓰레드를 여러 개 쓰는 것이 메모리나 성능 면에서 유리
✔ 필기 강조: "멀티 쓰레드가 더 효율적", "1999년부터 서블릿 대중화"
멀티 쓰레드의 장단점
대부분의 프로그램은 멀티 쓰레드로 작성됨
- 하지만 장점만 있는 건 아님 → 단점도 반드시 고려해야 함
장점
자원 효율 | 시스템 자원을 더 효율적으로 사용할 수 있음 |
사용자 응답성 | UI 응답 속도(responsiveness) 향상 |
코드 분리 | 작업이 분리되므로 코드가 더 간결해짐 |
비유: 하나의 앱이 여러 작업을 동시에 처리하는 UI (예: 화면 렌더링 + 버튼 응답)
단점
동기화 문제 | 여러 쓰레드가 동시에 자원 접근 시 충돌 가능성 → synchronization 필요 |
교착 상태 | deadlock: 서로 자원 기다리다 멈춤 |
실행 제어 | 쓰레드 간 우선순위 조절, 효율적 분산 실행이 어렵다 |
'Java' 카테고리의 다른 글
싱글 쓰레드와 멀티 쓰레드 (0) | 2025.06.27 |
---|---|
쓰레드의 구현과 실행 (0) | 2025.06.27 |
메타 애너테이션 (0) | 2025.06.26 |
표준 애너테이션 (0) | 2025.06.26 |
애너테이션 (0) | 2025.06.26 |