멀티태스킹 프로그램
- 큰 규모의 응용 프로그램은 여러 작업(task)을 동시에 실행하는 경우 多
- 응용프로그램의 여러 task가 동시에 진행되도록 하는 멀티태스킹 기법 사용
스레드(thread): OS 혹은 JVM(Java Virtual Machine)에서 task 실행의 단위
- thread of control
- 프로그램 코드를 실행하는 하나의 실 혹은 제어의 개념
- task마다 하나의 스레드가 생성되며, 하나의 스레드로 하나의 task만 처리 可
- 스레드들은 상호 독립적
- OS나 JVM에 의해 관리됨
멀티태스킹과 멀티스레딩
멀티프로세싱(multi-processing)
- 하나의 응용 프로그램을 여러 개의 프로세스(process)로 구성, 각 프로세스가 하나의 task를 처리하도록 하는 기법
- 각 프로세스는 고유한 메모리 영역을 보유, 독립적으로 실행
→ 문제 발생
1. 하나의 응용 프로그램에 속하는 프로세스들은 변수를 공유할 수 없으므로 프로세스 간 통신(IPC, Inter Process Communication)이 어려움
2. 프로세스 간 문맥 교환(context switch)에 따른 작업량과 시간 소모 up
멀티스레딩(multi-threading)
- 멀티프로세싱의 문제점 해결을 위해 고안
- 하나의 응용 프로그램을 동시 처리가 가능한 여러 작업(=코드)으로 분할, 작업의 개수만큼 스레드를 생성하여 각 스레드가 하나의 작업을 처리하게끔 하는 기법
- 모든 스레드는 응용프로그램 내의 자원과 메모리를 공유 → 통신 오버헤드 및 문맥 교환 작업량 ↓
- 윈도우, 리눅스 등 많은 OS들이 멀티스레딩을 기본으로 함(멀티프로세싱 지원 O)
멀티스레딩 활용 분야 예시: 웹 서버 S/W
- n명의 클라이언트가 서버에 동시 접속했을 때, 서버는 각 클라이언트마다 스레드 생성 → 클라이언트 각각의 요청 서비스