오늘의 키워드
- 프로세스
- 쓰레드
오늘의 내용
- 프로세스
- 운영체제로부터 자원을 할당받는 작업의 단위
- Code, Data, Memory로 구조를 이룬다
- 쓰레드
- 프로세스가 할당받은 자원을 이용해 실행하는 단위
- 작업 중인 프로그램에서 요청이 들어와 쓰레드를 생성해 요청을 처리한다
- 프로세스 내에 주소공간, 메모리공간(Heap)을 공유받는다
- 자신만의 메모리공간(Stack)을 할당받는다
- 싱글 쓰레드와 멀티 쓰레드
- 싱글 쓰레드 : 프로세스 안에서 하나의 쓰레드만 실행된다
- 멀티 쓰레드 : 프로세스 안에서 여러 개의 쓰레드가 실행되는 것
- 멀티 쓰레드는 각각의 쓰레드들이 자원을 공유하고 여러 작업을 동시에 해서 성능이 좋아진다
- 스택을 제외한 모든 영역에서 메모리를 공유해서 자원을 효율적으로 사용한다
- 응답 쓰레드와 작업 쓰레드를 분리해 응답이 빠르다
- 서로 자원을 공유하기 때문에 자원을 먼저 사용하려고 하는 충돌이 발생할 수 있다
- 데드락(교착상태)이 발생할 수 있다
- 데드락 : 서로 자원을 원하는 상태에서 서로의 작업이 종료되기를 기다리는 상태
- 데몬 쓰레드와 사용자 쓰레드
- 데몬 쓰레드
- 백그라운드에서 실행되는 낮은 우선순위를 가지는 쓰레드
- 보조적인 역할을 담당하며 대표적으로 메모리 영역을 정리하는 가비지 컬레터가 있다
- 사용자 쓰레드
- 보이는 곳에서 실행되는 높은 우선순위를 가진 쓰레드로 프로그램 기능을 담당
- 사용자 쓰레드의 작업이 끝나면 자동으로 데몬 쓰레드도 종료된다
- 데몬 쓰레드
- 쓰레드의 우선순위와 쓰레드 그룹
- 쓰레드 우선순위
- 작업의 중요도에 따라 우선순위를 부여할 수 있는데 순위가 높을수록 빠르게 처리된다
- 최대 우선순위는 10, 최소는 1, 보통은 5이다
- 기본 값은 보통 우선순위이다
- 쓰레드의 우선순위는 setPriority()로 설정하고 getPriority()로 반환한다
- 쓰레드의 우선순위가 높다고 반드시 먼저 종료되는건 아니다
- 쓰레드 그룹
- 기본적으로 System그룹에 포함된다
- 메인 쓰레드는 main그룹에 포함된다
- 모든 쓰레드는 하나의 그룹에 포함되어 있어야 한다
- ThreadGroup 클래스로 객체를 만들어서 Thread 객체 생성 시 첫 번째 매개변수로 넣어주면 된다
- ThreadGroup 객체의 interrupt() 메서드를 실행시키면 해당 그룹 쓰레드들이 실행대기 상태로 변경된다
- 쓰레드 상태와 제어
- 쓰레드 상태
- 실행과 대기를 반복해 run() 메서드를 수행
- run()이 종료되면 실행이 멈춘다
- 쓰레드 상태
- sleep()과 interrupt()
- sleep() : 현재 쓰레드를 지정된 시간 동안 멈추게 하고 자기 자신만 멈추게 할 수 있다
- 사용 시 반드시 예외처리를 해야 한다
- interrupt() : 일시정지 상태인 쓰레드를 실행대기 상태로 만든다
- sleep() : 현재 쓰레드를 지정된 시간 동안 멈추게 하고 자기 자신만 멈추게 할 수 있다
- 쓰레드 우선순위
오늘의 회고
- 개인프로젝트 제출이 끝나니까 긴장이 풀려서 그런지 평상시보다 집중력이 떨어진 거 같다
- 내일부턴 팀프로젝트가 시작되어 남은 강의를 듣지 않으면 영영 못 듣게 될 거 같으니 얼른 강의를 다 들어야겠다
- 아직 몸이 적응을 하지 못해서인지 감기기운도 있고 소화도 잘 안되고 그렇다
'TIL' 카테고리의 다른 글
내일배움캠프 3주차 람다와 스트림 (0) | 2024.05.03 |
---|---|
내일배움캠프 3주차 쓰레드 이어서 (2) | 2024.05.02 |
내일배움캠프 3주차 개인프로젝트 (0) | 2024.05.01 |
내일배움캠프 3주차 TIL + 오류와 예외처리 (0) | 2024.04.29 |
내일배움캠프 2주차 TIL + 상속, 추상클래, 인터페이스 등 (0) | 2024.04.26 |