-
Notifications
You must be signed in to change notification settings - Fork 0
박정제 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
클래스를 통해 생성함
-
main 스레드: 자바 프로그램의 진입점인
main
메서드를 실행함 - 가비지 컬렉션 스레드: 자바 힙 메모리에서 사용되지 않는 객체를 정리함
- JIT 컴파일러 스레드: 자바 바이트코드를 네이티브 머신 코드로 컴파일함
- 기타 시스템 스레드: JVM의 신호 처리, 모니터링, 디버깅 등을 담당함
- 커널 스레드: 커널에 의해 생성되고 스케줄링됨
- 사용자 스레드: 응용 프로그램이 라이브러리 함수를 통해 생성하며, 커널은 존재를 인지하지 못함
- 각 요청을 별도의 프로세스로 처리하여 격리된 환경을 제공함
- 메모리 사용량이 많고, 컨텍스트 스위칭 오버헤드가 큼
- 동적 컨텐츠 제공에 최적화되어 있음
- 스레드 간 데이터 공유가 가능하여 빠른 응답이 필요한 동적 애플리케이션에 유리함
- 유저 스레드와 커널 스레드의 관계는 복잡하며, 특정 JVM 구현에 따라 다를 수 있음
- 경량 스레드로, 기존 유저 스레드보다 적은 비용으로 생성 및 관리가 가능함
- 더 많은 동시성 처리를 효율적으로 수행할 수 있음
-
ExecutorService
를 통해 멀티 스레드로 요청을 처리함
- RFC 규격에 맞게 HTTP 요청을 파싱함
- 요청을 처리할 수 있는 핸들러를 구현함
- 각 요청에 맞는 라우팅 기능을 제공함
- JSON 형식으로 응답을 보내기 위한 변환기를 구현함
- PathVariable을 지원하여 다양한 요청을 처리함