멀티스레딩이 필요한 이유
1. 응답성 향상
- 사용자 요청을 개별 스레드로 처리해 대기 시간을 줄임
- 동영상 재생, 버튼 클릭 등 다양한 작업을 동시에 처리해 반응 속도 개선
2. 성능 최적화
- 병행성을 통해 단일 코어에서 여러 작업을 동시에 처리하는 효과
- 병렬 처리를 활용하면 실제로 여러 작업을 동시에 수행 가능
- 적은 하드웨어로도 높은 처리량을 구현, 비용 절감 효과
멀티스레드의 기본 개념
- 프로세스 : 운영체제에서 실행되는 독립적인 어플리케이션
- 스레드 : 프로세스 내에서 실행되는 작업 단위
- 각 스레드는 개별 스택(Stack)과 명령어 포인터(Instruction Pointer)를 가짐
- 스택(Stack)
- 각 스레드의 메모리 영역으로, 지역 변수와 함수 호출 정보를 저장
- 스레드가 수행하는 작업의 상태와 컨텍스트를 유지하는데 사용
- 예를 들어, 함수 호출 시 매개변수와 반환 주소를 저장하며, 함수가 종료되면 스택에서 제거
- 명령어 포인터(Instruction Pointer)
- 스레드가 실행할 다음 명령어 주소를 가리킴
- 실행 흐름을 제어하는 역할로, 현재 스레드 실행 위치를 추적
- 각 스레드가 독립적으로 실행 흐름을 유지할 수 있도록 분리된 명령어 포인터를 가짐
- 스택(Stack)
- 프로세스의 힙, 코드, 파일 자원을 공유하여 사용
- 코드(Code) : CPU에서 실행될 명령어
- 힙(Heap) : 프로그램 실행 중 생성되는 데이터(동적 메모리)
- 파일(File) : 읽거나 쓸 데이터를 관리
- 각 스레드는 개별 스택(Stack)과 명령어 포인터(Instruction Pointer)를 가짐
어플리케이션 실행 시 프로세스 생성 흐름
1. 파일 저장 : 저장소에 어플리케이션 프로그램 파일 형태로 저장(텍스트 편집기, 웹 브라우저, 음악 파일 등)
2. 실행 요청 : 사용자가 어플리케이션을 실행하면 운영체제가 요청 처리
3. 메모리 로드 : 운영체제가 저장소의 프로그램을 메모리로 로드, 이 과정을 통해 프로그램이 실행 가능한 상태로 준비
4. 프로세스 생성 : 메모리로 로드된 프로그램을 기반으로 프로세스 인스턴스 생성, 프로세스는 다음 정보를 포함
- 코드(Code) : CPU에서 실행될 명령어
- 힙(Heap) : 프로그램 실행 중 생성되는 데이터(동적 메모리)
- 파일(File) : 읽거나 쓸 데이터를 관리
- 스레드(Thread) : 프로세스의 실행 단위로, 최소 1개의 메인 스레드 포함
5. 실행 시작 : 생성된 프로세스의 스레드가 명령어를 실행, 이때 스레드는 자체적인 스택과 명령어 포인터를 이용해 작업 처리
6. 운영체제의 역할
- 프로세스 간 자원 충돌 방지
- 효율적 자원 관리
- 하드웨어와 어플리케이션 강의 상호작용 중재
'Java & Spring Boot' 카테고리의 다른 글
[Java] 멀티스레딩 연습 - 금고, 해커, 경찰 게임 구현 (0) | 2024.11.24 |
---|---|
[Java] Thread와 Runnable 활용 및 예외 처리 (0) | 2024.11.24 |
[Spring Boot] JWT(Access Token, Refresh Token) RTR 구현 (0) | 2024.11.02 |
[Spring Boot] 다중 데이터베이스 + JPA 환경에서의 트랜잭션 관리에 대하여 (0) | 2024.05.08 |
[Java] Generic 동작 원리 및 용도 (1) | 2024.02.12 |