⏱️ 6. 스레드
① 스레드간 공유가능한 데이터
- 프로세스 ID : 메타데이터
- 파일 : 애플리케이션이 읽고 쓰기위해 여는 파일.
- 코드 : CPU에서 실행되는 프로그램의 명령어
- 힙(Data) : 애플리케이션에 필요한 데이터
② 스레드간 공유 되지 않는 데이터
- 스택 : 메모리영역 지역 변수, 함수
- 레지스터
- PC : 명령 포인터
📄 1. 스레드
CPU에서 실행되며, 프로세스보다 더 작은 "최소 수행단위"
- 하나의 프로세스에는 동시에 실행되는 여러개의 스레드가 존재함
- 위의 설명 그대로 코드 수행를 하는 최소 수행 단위 이며, 프로세스보다 더 적은 비용을 사용한다.
- 그 이유는 프로세스의 자원을 일부 공유를 하고, 개별적인 자원이 프로세스보다 더 적기 때문.
- 생성과 삭제가 빠르고, Process Context Switcing VS Thread Context Switcing 에서 스레드 승!
- 멀티 프로세스와는 다르게 한 스레드에 문제가 생기면 프로세스 전체에 문제가 생기며, 자원 공유 떄문에 동기화 문제도 있다.
1). 병렬과 병행 작업의 단위로서 스레드의 장점
- 멀티코어 프로세서 상에서 스레드를 사용하면, 여러 스레드가 동시에 실행되어 병렬 처리를 통해 성능 향상을 얻을 수 있음
- 긴 작업을 처리하는 스레드와, 유저 입력과 같은 짧은 작업을 처리하는 스레드를 나눠
응답성을 향상시킬 수 있음.
2). Foreground Thread & Background Thread
- 포어그라운드이면 MainThread가 종료 되어도 프로세스가 종료에 영향을 미치지만,
- 백그라운드라면 MainThread의 종료 여부를 따지지 않기 때문에
메인 스레드에 종료에 따라 프로세스, 스레드 모두 종료된다. Java에서는 Daemon 상태냐 아니냐를 의미한다. - 스레드 풀에서는 모든 스레드는 Background Thread이다.
📄 2. 스레드의 상태 관리
Thread.CurrentThread.ThreadState
스레드 상태 | 설명 |
---|---|
Unstarted | thread 객체는 생겨져 있지만, Start() 메서드가 아직 호출이 안된 상태 |
Running | Start()가 호출되어 thread가 동작중인 상태 |
Wait/Sleep/Join | 스레드가 Block 된 상태 Enter(), Sleep(), Join() 호출될때 상태다 |
Aborted | Aborted 메서드가 호출되어 스레드의 동작이 취소된 상태, 이후 Stopped 상태로 바뀌어 스레드가 완전 중지됨 |
Stopped | 스레드가 완전히 종료된 상태 |
참고
'CS > OS' 카테고리의 다른 글
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도 (0) | 2025.01.18 |
---|---|
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙 (0) | 2025.01.18 |