99클럽 23일차 TIL: Thread (Java, Spring)
2024. 4. 26. 21:09ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
자바 스프링에서의 쓰레드에 대해
- JS → 자바로 넘어오면서, 언어에 차이는 멀티쓰레드 유무라고 알고 있었다.
- JS
- 싱글 쓰레드
- 자바
- 멀티 쓰레드
- JS
- 이에 대해서 디테일하게 알아보자
#2. 공부한 내용
1. Process
- 운영체제(os)에서 할당하는 작업의 단위
- 실행 중인 프로그램
- 프로세스는 디스크 → 메모리 → CPU 의 할당을 받는 작업의 단위
- 컴퓨터에서 실행 중인 프로그램으로 봐도 무방하다
- 프로세스 끼리는 별도의 메모리 영역을 갖는다.
2. Thread
- 프로세스의 실행 최소 단위
- 한 프로세스 내의 여러 쓰레드가 작업을 나누어서 실행을 한다.
- 같은 프로세스 내 쓰레드 끼리는 자원 공유가 가능하다.
- 공유되는 자원은 코드, 데이터, 파일 등이다.
- 구조
- 쓰레드 ID
- 쓰레드의 식별자
- 프로세스도 PID 가 있듯이 쓰레드도 ID 가 있음
- Program Counter(PC)
- 쓰레드의 명령어가 어디까지 수행 되었는 지 나타냄
- 쓰레드의 실행은 중간에 끊길 수가 있기 때문에, 쓰레드는 instruction 실행이 어디까지 됐는 지 기억할 필요가 있다.
- 레지스터
- 스택
- 함수 호출 시 parameter, 되돌아가는 포인터, 함수 내 변수 등을 저장하기 위한 메모리 공간
- 스택은 쓰레드 별로 독립적임
- 쓰레드 ID
3. 자바에서의 쓰레드
- 자바에서는 JVM ( java virtual machine) 으로 하나의 프로세스를 실행하며, 멀티 쓰레드를 지원한다.
- 즉 JVM 으로 쓰레드를 관리
- 프로세스에는 적어도 하나의 쓰레드가 있으며, Main 쓰레드로부터 작업이 시작된다
- 메인 쓰레드로 부터 자식 쓰레드가 생길 수 있다
- 그리고 해당 메서드는 프로그램을 실행시킬 때 자동적으로 생성된다.
- 만약 같은 프로세스 내 main 쓰레드 제외 다른 쓰레드가 추가 된다면, 멀티 쓰레드 환경이 되고, 이런 쓰레드 끼리는 프로세스의 리소스를 공유한다.
1) 생성자
- Thread()
- 쓰레드 객체 생성자
- Thread(String name)
- name 인자 값으로 이름을 붙인 쓰레드 객체 생성
- Thread(Runnable target)
- Runnable target 이 구현된 쓰레드 객체 생성
- Thread(Runnable target)
- 위 두 개 기능 combine
2) 메서드
- void run()
- 쓰레드의 실행 코드를 작성하는 메서드.
- 해당 메서드를 override 해서 사용
- long getId()
- 쓰레드 id 반환
- void interrupt()
- 쓰레드 중지
- void start()
- 쓰레드가 시작되도록 요청하는 메서드
- 쓰레드가 해당 메서드로 시작되면, run() 메서드가 실행됨
- https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
- 위 공식 문서에서 모든 쓰레드 메서드 확인 가능
3) 동기처리
- 쓰레드에서 동기 처리는 중요하다.
- 실행 순서가 중요한 부분일 경우, 멀티 쓰레딩에 의해 해당 순서가 꼬이면 안 되기 때문.
- 동기 구현 방식
- method 구현
- block 구현
- 주의할 점은 두 쓰레드에서 다른 객체로 실행을 하면, 동기 처리를 해도 동시에 작동을 한다.
- 그와 다르게 두 쓰레드에서 하나의 객체에서 동기 실행 메서드를 호출하면, 먼저 호출된 쪽이 다 실행이 되고, 그 다음 호출된 쪽이 실행된다.
// -1- method
public synchronized void methodA(){
//동기 처리 코드
}
// -2- block
synchronized(this){
//동기 처리 코드
}
- 참조:
#3. 오늘의 회고
- 자바 개발에서 쓰레드는 동시성 및 병렬성을 구현하는 데 중요한 요소다.
- 여러 작업의 동시 처리 및 프로그램 성능 향상에 일조하기 때문이다.
- i/o 작업 및 네트워크 호출 등의 블로킹 작업을 별도의 쓰레드에서 처리하도록 하면, 대기 시간 최소화할 수가 있다.
- 쓰레드를 사용하는 건 이점을 가져다 주지만, 동시에 잠재적 위험성도 있다.
- 데드락 / 교착 상태 유발 가능
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 25일차 TIL: 아키텍처 패턴 - MSA (2) | 2024.04.28 |
---|---|
99클럽 24일차 TIL: 아키텍처 패턴 - 모놀리식 (4) | 2024.04.27 |
99클럽 22일차 TIL: KISS, YAGNI, DRY (2) | 2024.04.25 |
99클럽 21일차 TIL: Validation Group (2) | 2024.04.24 |
99클럽 20일차 TIL: SOLID (0) | 2024.04.23 |