프로세스
- 프로세스는 실행 중인 프로그램의 인스턴스이다.
- 각 프로세스는 독립적인 메모리 공간을 갖고 있으며, 운영체제에서 별도의 작업 단위로 분리해서 관리된다.
- 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다. 그리고 프로세스가 서로의 메모리에 직접 접근할 수 없다.
- 만약 A 프로세스에서 진행중인 게임을 관리 하고있고, B 프로세스에서 유튜브 뮤직을 관리하고 있다면, A 프로세스에 문제가 발생해도 A 프로세스만 종료되고 B 프로세스에는 영향을 주지않는다.
프로세스의 메모리 구성
- 코드 섹션 : 실행할 프로그램의 코드가 저장되는 영역
- 데이터 섹션 : 전역 변수 및 정적 변수가 저장되는 영역
- 힙 (Heap) : 동적으로 할당되는 메모리 영역
- 스택 (Stack) : 메서드 호출 시 생성되는 지역 변수와 반환 주소가 저장되는 영역(스레드에 포함)

스레드(Thread)
- 프로세스는 하나 이상의 스레드를 반드시 포함한다.
- 스레드는 프로세스 내에서 실행되는 작업의 단위이고 한 프로세스에서 여러 스레드가 존재 가능하며, 프로세스가 제공하는 동일한 메모리 공간을 공유한다.
스레드의 메모리 구성
- 공유 메모리 : 같은 프로세스의 코드 섹션, 데이터 섹션, 힙(메모리)은 프로세스 안의 모든 스레드가 공유한다.
- 개별 스택 : 각 스레드는 자신의 스택을 가지고 있다.
싱글 스레드와 멀티 스레드
- 싱글 스레드
- 하나의 작업 단위(스레드)가 순차적으로 실행되는 구조
- 한 번에 하나의 작업만 처리하며, 다음 작업은 이전 작업이 완료된 후 실행
- 멀티 스레드
- 여러 개의 작업 단위(스레드)가 동시에 실행되는 구조
- 여러 작업을 병렬적으로 처리하여 효율성을 높일 수 있다.

싱글 스레드와 멀티 스레드 예제
public class SingleThreadExample {
public static void main(String[] args) {
System.out.println("싱글 스레드 시작");
// 첫 번째 작업
printNumbers("Task 1");
// 두 번째 작업
printNumbers("Task 2");
System.out.println("싱글 스레드 종료");
}
public static void printNumbers(String taskName) {
for (int i = 1; i <= 5; i++) {
System.out.println(taskName + " - " + i);
try {
Thread.sleep(500); // 0.5초 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
== 결과 ==
싱글 스레드 시작
Task 1 - 1
Task 1 - 2
Task 1 - 3
Task 1 - 4
Task 1 - 5
Task 2 - 1
Task 2 - 2
Task 2 - 3
Task 2 - 4
Task 2 - 5
싱글 스레드 종료
public class MultiThreadExample {
public static void main(String[] args) {
System.out.println("멀티 스레드 시작");
// 첫 번째 작업 스레드 생성
Thread task1 = new Thread(() -> printNumbers("Task 1"));
// 두 번째 작업 스레드 생성
Thread task2 = new Thread(() -> printNumbers("Task 2"));
// 두 작업을 동시에 실행
task1.start();
task2.start();
System.out.println("멀티 스레드 종료 (메인 스레드 종료)");
}
public static void printNumbers(String taskName) {
for (int i = 1; i <= 5; i++) {
System.out.println(taskName + " - " + i);
try {
Thread.sleep(500); // 0.5초 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
== 결과 ==
멀티 스레드 시작
Task 1 - 1
Task 2 - 1
Task 1 - 2
Task 2 - 2
Task 1 - 3
Task 2 - 3
Task 1 - 4
Task 2 - 4
Task 1 - 5
Task 2 - 5
멀티 스레드 종료 (메인 스레드 종료)
'Network' 카테고리의 다른 글
[Network] 비동기 통신이란 ? 비동기 통신의 종류 및 방법 (Axios/Fetch) (0) | 2024.06.23 |
---|---|
[Network] REST API의 구성 및 특징 (0) | 2024.06.21 |
[Network] GET 요청/ POST 요청 차이점 (0) | 2024.06.09 |
[Network] 쿠키/세션, JWT 개념 (0) | 2024.06.08 |
[Network] TCP와 UDP의 특징과 차이점 (0) | 2024.06.06 |