Skip to content

박정제 2주차 was 학습 일지

CodingLuizy edited this page Jul 8, 2024 · 1 revision

프로세스와 스레드 개요

프로세스

정의

  • 프로세스는 커널 레벨에서 자원을 할당받는 단위로, 컴퓨터에서 실행 중인 프로그램을 의미함
  • 자원을 소유하며 특정 기능을 수행하거나 스케줄링하는 객체임

구성 요소

  • Code Area: 프로그램 코드가 저장되는 불변 영역
  • Data Area: 고정적으로 할당된 변수 공간
  • Heap Area: 실행 도중 동적으로 생성되는 가변 영역
  • Stack Area: 함수 호출 시 사용되는 가변 영역 (LIFO 방식)
  • PCB (Process Control Block): 프로세스를 관리하기 위한 데이터 구조로, 프로세스의 상태, 프로그램 카운터 등의 정보를 포함함

생성 방법

  • fork(): 기존 프로세스를 복제
  • exec(): 새로운 프로세스로 오버레이

프로세스 생명 주기

  • 프로세스는 생성, 준비, 실행, 대기, 종료 상태를 가지며, 각 상태는 PCB에 의해 관리됨

스레드

정의

  • 스레드는 프로세스 내에서 실행되는 독립적인 실행 단위임. 스레드는 프로세스의 자원을 공유하지만 각각의 처리 시간과 스택, 레지스터가 할당됨

구성 요소

  • 스레드 컨텍스트: CPU 레지스터 값들, 현재 실행 중인 코드 주소, 스택 주소, 상태 레지스터 등을 포함함
  • TCB (Thread Control Block): 스레드의 컨텍스트 정보를 저장함

장점

  • 스레드는 프로세스의 컨텍스트 스위칭보다 비용이 적고, 메모리 및 파일을 공유할 수 있음
  • 프로그램 구조를 단순화할 수 있음

스레드 생명 주기

  • 스레드는 생성, 준비, 실행, 대기, 종료 상태를 가지며, 각 상태는 TCB에 의해 관리됨

커널 레벨 스레드

  • 커널에 의해 생성되고 관리되며, 스레드 정보는 커널 공간에 저장됨

사용자 레벨 스레드

  • 응용 프로그램이 라이브러리 함수를 통해 생성하며, 커널은 존재를 인지하지 못함

프로세스와 스레드의 차이점

  • 프로세스는 커널에서 자원을 할당받는 실행 단위고, 스레드는 프로세스 내에서 실행되는 단위임
  • 스레드는 프로세스의 자원을 공유하여 데이터 교환이 빠르고 효율적임

자바에서의 스레드

스레드 생성

  • java.lang.Thread 클래스를 통해 생성함

주요 스레드

  1. main 스레드: 자바 프로그램의 진입점인 main 메서드를 실행함
  2. 가비지 컬렉션 스레드: 자바 힙 메모리에서 사용되지 않는 객체를 정리함
  3. JIT 컴파일러 스레드: 자바 바이트코드를 네이티브 머신 코드로 컴파일함
  4. 기타 시스템 스레드: JVM의 신호 처리, 모니터링, 디버깅 등을 담당함

커널 스레드와 사용자 스레드

  • 커널 스레드: 커널에 의해 생성되고 스케줄링됨
  • 사용자 스레드: 응용 프로그램이 라이브러리 함수를 통해 생성하며, 커널은 존재를 인지하지 못함

멀티프로세싱과 멀티스레딩

아파치 웹서버 (멀티프로세싱)

  • 각 요청을 별도의 프로세스로 처리하여 격리된 환경을 제공함
  • 메모리 사용량이 많고, 컨텍스트 스위칭 오버헤드가 큼

톰캣 (멀티스레딩)

  • 동적 컨텐츠 제공에 최적화되어 있음
  • 스레드 간 데이터 공유가 가능하여 빠른 응답이 필요한 동적 애플리케이션에 유리함

자바의 유저 스레드와 커널 스레드의 관계

  • 유저 스레드와 커널 스레드의 관계는 복잡하며, 특정 JVM 구현에 따라 다를 수 있음

버추얼 스레드

  • 경량 스레드로, 기존 유저 스레드보다 적은 비용으로 생성 및 관리가 가능함
  • 더 많은 동시성 처리를 효율적으로 수행할 수 있음

Java WAS

멀티스레드 구현

  • ExecutorService를 통해 멀티 스레드로 요청을 처리함

HTTP Request

  • RFC 규격에 맞게 HTTP 요청을 파싱함

Request Handler

  • 요청을 처리할 수 있는 핸들러를 구현함

Router

  • 각 요청에 맞는 라우팅 기능을 제공함

Json Body Response

  • JSON 형식으로 응답을 보내기 위한 변환기를 구현함

Endpoint

  • PathVariable을 지원하여 다양한 요청을 처리함

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally