목록쓰레드 (7)
변수의 기록
1. 쓰레드란 무엇인가?**쓰레드(Thread)**는 하나의 프로세스 내에서 독립적으로 실행되는 작업 단위다.자바 프로그램은 main 쓰레드에서 시작되며,추가적인 작업을 병렬로 처리하기 위해 새로운 쓰레드를 생성할 수 있다.쓰레드의 특징같은 프로세스 내의 쓰레드는 힙, 클래스 영역을 공유하고 스택은 독립적이다.한 쓰레드에서 예외가 발생해 종료되더라도 다른 쓰레드는 영향을 받지 않는다.자바는 쓰레드를 JVM 레벨에서 관리하고, 실제 실행은 OS의 네이티브 쓰레드를 사용한다. (Java 21부터는 가상 쓰레드도 가능)2. 쓰레드 생성 방법 – Thread 상속 vs Runnable 구현자바에서 쓰레드를 생성하는 대표적인 두 가지 방식이 있다.2-1. Thread 클래스 상속class MyThread exte..

Block I/O vs Non-block I/O (소켓 I/O 기반 설명)1. I/O란?I/O(Input/Output)는 데이터의 입출력을 의미합니다. 일반적으로 아래와 같은 형태가 있습니다:네트워크 I/O (소켓): 네트워크 통신은 소켓을 통해 데이터를 송수신합니다.파일 I/O: 디스크에서 파일을 읽거나 쓰는 작업.파이프 I/O: 프로세스 간 통신.디바이스 I/O: 키보드 입력, 화면 출력 등 하드웨어 장치와의 데이터 송수신.소켓 I/O는 네트워크 프로그램에서 가장 핵심적인 요소이며, 클라이언트-서버 간 통신에 사용됩니다.2. Block I/O vs Non-block I/O🔸 Block I/O (Blocking I/O)I/O 요청을 하면 작업이 완료될 때까지 쓰레드는 대기(블로킹) 상태가 됩니다.예:..

Thread Per Request vs Thread Pool 모델 정리1. Thread Per Request 모델서버에 요청이 들어올 때마다 새로운 스레드를 생성해 처리하고, 요청 처리가 끝나면 해당 스레드를 버리는 방식입니다. ⚠️ 문제점스레드 생성 비용: 스레드 생성과 소멸은 커널 개입이 필요한 작업으로 비용이 큽니다. (컨텍스트 구조 초기화, 스택 메모리 확보 등)요청 폭주 시 병목: 요청이 처리 속도보다 빠르게 들어올 경우, 새로운 스레드가 계속 생성되고 이로 인해 스레드 수 급증.컨텍스트 스위칭 빈도 증가 → CPU 오버헤드 발생메모리 고갈 가능성 → OutOfMemoryError 또는 서버 응답 불능예측 불가능성: 자원 소모가 요청 수에 비례하여 늘어나므로, 대량 요청에 대한 대비가 어렵다.2..

운영체제와 스레드 - 하드웨어부터 유저 스레드까지1. 하드웨어 스레드 (Hardware Thread)문제의 출발점코어는 연산 능력이 빠르지만, 메모리에서 데이터를 가져오는 속도는 상대적으로 느림.메모리 I/O 대기 시간 동안 CPU가 놀고 있다면 자원 낭비!해결책하드웨어 스레드(예: 인텔 하이퍼 스레딩)하나의 물리 코어에 둘 이상의 하드웨어 스레드를 넣어 동시에 여러 스레드를 실행할 수 있게 함즉, 하나의 코어가 여러 작업을 병렬처럼 수행 ( os는 이 cpu 를 듀얼코어로 인식, 듀얼 코어에 맞춰서 os 레벨의 스레드들을 스케줄링 한다.)예시💡 듀얼 코어(Intel Dual-Core)에 하이퍼스레딩이 적용되면?→ 하드웨어 스레드는 총 4개→ OS는 이를 4개의 CPU처럼 인식하고 스케줄링 2. OS ..
1. 스레드 덤프란?스레드 덤프는 실행 중인 자바 애플리케이션의 모든 스레드 상태를 출력한 스냅샷이다.서버에서 응답 지연, 무한 대기, CPU 사용률 급증, 데드락 등이 발생했을 때, 그 원인을 파악하기 위한 주요 도구로 사용된다.스레드 덤프를 분석하면 다음을 확인할 수 있다:현재 어떤 스레드가 실행 중인지어떤 스레드가 락을 점유하고 있는지, 어떤 스레드가 락을 기다리고 있는지데드락 여부 및 락 경합 병목 구간2. 스레드 덤프 생성 방법2.1 jstack 명령어 (권장)jps # 현재 실행 중인 Java 프로세스 ID 확인jstack # 스레드 덤프 출력jstack > threaddump.txt # 파일로 저장2.2 kill -3 (Linux/UNIX/macOS)kill -3 ..

자바 스레드의 상태 – OS 프로세스와 어떻게 다를까?멀티스레드 프로그래밍을 하다 보면, Runnable, Blocked, Waiting 같은 자바 스레드 상태들이 헷갈릴 수 있습니다.운영체제(OS)의 프로세스 상태와도 비슷한 듯 다른 이 구조, 이번 글에서 명확하게 정리해보겠습니다.1. OS의 프로세스 상태 (Process States in OS)운영체제에서 프로세스는 기본적으로 다음과 같은 상태를 가집니다: 상태설명New프로세스가 막 생성됨 (아직 실행 준비 X)Ready실행 준비 완료, CPU 할당을 기다림RunningCPU에서 실행 중Waiting (Blocked)I/O 등 외부 자원을 기다리며 대기Terminated실행 완료 후 종료됨 특징:CPU 중심적인 상태 변화실행 준비 / 실행 중 / ..

🔁 컨텍스트 스위칭의 개념과 구조📌 컨텍스트 스위칭이란?컨텍스트 스위칭(Context Switching)은 CPU가 현재 실행 중인 작업(프로세스 또는 스레드)을 중단하고, 다른 작업으로 전환하는 과정이다. 이 과정에서 현재 작업의 상태(레지스터 값, 프로그램 카운터, 스택 포인터 등)를 저장하고, 다음 작업의 상태를 복원한다.컨텍스트 스위칭은 크게 두 종류로 나뉜다:프로세스 컨텍스트 스위칭스레드 컨텍스트 스위칭🧠 프로세스 컨텍스트 스위칭개념서로 다른 프로세스 간 전환주소 공간, 페이지 테이블, TLB, PCB 등이 모두 변경메모리 보호를 위해 각 프로세스는 독립된 가상 주소 공간을 가지므로 MMU와 협업이 필요동작 과정현재 프로세스의 PCB(Process Control Block) 저장다음 프로세..