Java & Spring Boot

[Java] Multithreading 기본 개념 - 응답 속도 & 성능 향상 이해하기

Accept 2024. 11. 23. 21:38

멀티스레드 기반 어플리케이션 프로세스

 

멀티스레딩이 필요한 이유

1. 응답성 향상

  • 사용자 요청을 개별 스레드로 처리해 대기 시간을 줄임
  • 동영상 재생, 버튼 클릭 등 다양한 작업을 동시에 처리해 반응 속도 개선

2. 성능 최적화

  • 병행성을 통해 단일 코어에서 여러 작업을 동시에 처리하는 효과
  • 병렬 처리를 활용하면 실제로 여러 작업을 동시에 수행 가능
  • 적은 하드웨어로도 높은 처리량을 구현, 비용 절감 효과

 

멀티스레드의 기본 개념

  • 프로세스 : 운영체제에서 실행되는 독립적인 어플리케이션
  • 스레드 : 프로세스 내에서 실행되는 작업 단위
    • 각 스레드는 개별 스택(Stack)명령어 포인터(Instruction Pointer)를 가짐
      • 스택(Stack)
        • 각 스레드의 메모리 영역으로, 지역 변수함수 호출 정보를 저장
        • 스레드가 수행하는 작업의 상태와 컨텍스트를 유지하는데 사용
        • 예를 들어, 함수 호출 시 매개변수와 반환 주소를 저장하며, 함수가 종료되면 스택에서 제거
      • 명령어 포인터(Instruction Pointer)
        • 스레드가 실행할 다음 명령어 주소를 가리킴
        • 실행 흐름을 제어하는 역할로, 현재 스레드 실행 위치를 추적
        • 각 스레드가 독립적으로 실행 흐름을 유지할 수 있도록 분리된 명령어 포인터를 가짐
    • 프로세스의 힙, 코드, 파일 자원을 공유하여 사용
      • 코드(Code) : CPU에서 실행될 명령어
      • 힙(Heap) : 프로그램 실행 중 생성되는 데이터(동적 메모리)
      • 파일(File) : 읽거나 쓸 데이터를 관리

 

어플리케이션 실행 시 프로세스 생성 흐름

1. 파일 저장 : 저장소에 어플리케이션 프로그램 파일 형태로 저장(텍스트 편집기, 웹 브라우저, 음악 파일 등)

2. 실행 요청 : 사용자가 어플리케이션을 실행하면 운영체제가 요청 처리

3. 메모리 로드 : 운영체제가 저장소의 프로그램을 메모리로 로드, 이 과정을 통해 프로그램이 실행 가능한 상태로 준비

4. 프로세스 생성 : 메모리로 로드된 프로그램을 기반으로 프로세스 인스턴스 생성, 프로세스는 다음 정보를 포함

  • 코드(Code) : CPU에서 실행될 명령어
  • 힙(Heap) : 프로그램 실행 중 생성되는 데이터(동적 메모리)
  • 파일(File) : 읽거나 쓸 데이터를 관리
  • 스레드(Thread) : 프로세스의 실행 단위로, 최소 1개의 메인 스레드 포함

5. 실행 시작 : 생성된 프로세스의 스레드가 명령어를 실행, 이때 스레드는 자체적인 스택과 명령어 포인터를 이용해 작업 처리

6. 운영체제의 역할

  • 프로세스 간 자원 충돌 방지
  • 효율적 자원 관리
  • 하드웨어와 어플리케이션 강의 상호작용 중재