✏️ 프로그램과 프로세스, 스레드
프로그램
: 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태
: 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았고, 움직이지 않은 상태라는 뜻
: ex. 윈도우의 *.exe 파일이나 MacOS의 *.dmg 파일 등등
프로세스
: 프로그램을 실행하여 파일이 컴퓨터 메모리에 올라가여 실행중인 상태
: 운영체제로부터 자원을 할당받는 작업의 단위
스레드
: 할당 받은 자원을 이용하는 실행 단위
🔎 프로세스와 스레드 어떤점이 다른데?
이전에는 프로그램 실행시 실행부터 끝까지 프로세스 하나만을 사용해서 진행하였지만 시간이 지날수록 프로그램이 복잡해지고
프로세스 하나만을 이용해 프로그램을 실행시키기 어려워져 더 작은 실행단위의 개념인 스레드가 생기게 되었다.
그럼 어떠한 점이 다를까?
스레드는 프로세스와 다르게 스레드간 메모리를 공유하며 작동한다. 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행흐름의 일부가 된다.
스레드를 코드에 비유하자면 스레드는 코드 내에 선언된 함수들이 되고 따라서 main 함수 또한 일종의 스레드라고 볼 수 있게 되는 것이다.
하지만 스레드가 메모리를 공유함으로서 발생하는 단점도 있다.
프로세스는 프로세스를 실행하다가 예기치못한 오류가 발생해서 프로세스가 강제로 종료된다면, 다른 프로세스와 공유하고 있는 파일을 손상시키는 경우가 아니라면 영향을 주지 않는다.
하지만 메모리를 공유하는 스레드는 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.
스택 영역
|
'✏️ Java' 카테고리의 다른 글
| ETC | 상속과 인터페이스 (0) | 2022.12.13 |
---|---|
| 혼공자 | Chapter 8.1 인터페이스 (0) | 2022.12.12 |
| 혼공자 | Chapter 7.1 상속 (0) | 2022.12.05 |
| 혼공자 | Chapter 6 . 클래스 5️⃣ (0) | 2022.11.30 |
| 혼공자 | Chapter 6 . 클래스 4️⃣ (0) | 2022.11.29 |