Network
[Network] 프로세스와 스레드(단일 스레드, 멀티 스레드)
하부루
2024. 11. 24. 18:16
프로세스
- 프로세스는 실행 중인 프로그램의 인스턴스이다.
- 각 프로세스는 독립적인 메모리 공간을 갖고 있으며, 운영체제에서 별도의 작업 단위로 분리해서 관리된다.
- 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다. 그리고 프로세스가 서로의 메모리에 직접 접근할 수 없다.
- 만약 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
멀티 스레드 종료 (메인 스레드 종료)