Light Weight Process 라고 부르기도 합니다.
작은 범위에서 스레드(thread)는 프로세스 내에서 실행되는 작업 흐름의 단위를 말합니다.
더 확장되어 CPU에서 실행되는 단위이다.
- 프로세스는 두 개 이상의 스레드를 가질 수 있습니다.
- 병렬적으로 작업을 처리할 수 있습니다.
- 같은 프로세스에 있는 스레드들끼리 컨텍스트 스위칭이 가볍다.
- 스레드는 위 사진처럼 data 등을 공유하고 있고 stack, register block 영역만 나눠져있기 때문에 그 부분만을 CPU 레지스터에 교체해주면 된다. 그러므로 프로세스 간의 컨텍스트 스위칭보다 비용이 훨씬 적다.
- 스레드간 데이터 통신이 쉽다.
- 위 사진처럼 스레드들은 자신들이 속한 프로세스의 메모리 영역 (data, code 영역 등)을 공유하고 있기 때문에 통신할 데이터를 이 공유 영역에 올리기만 하면 된다. 프로세스처럼 IPC같은 특별한 기법이 필요하지 않다.
프로세스
스레드
소프트웨어 병행 작업 처리를 위해 멀티 스레드를 사용합니다.
멀티 스레드를 사용하는 이유
1. 멀티 스레드는 각 스레드가 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적습니다.
2. 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아집니다.
작업들 사이에 실행 시기를 맞추는 것을 동기화라고 부릅니다.
여러 스레드가 동일한 데이터에 접근 시 동기화 이슈가 발생합니다.
동일 자원을 여러 스레드가 동시 수정 시 각 스레드 결과에 영향을 줍니다.
무한 대기 상태를 뜻합니다.
두 개 이상의 작업이 서로 상대방의 작업이 끝나기를 기다리고 있기 때문에 다음 단계로 진행하지 못합니다.
Deadlock 상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생합니다.
특정 프로세스의 우선 순위가 낮아 원하는 자원을 계속 할당 받지 못하는 상태를 뜻합니다.
Starvation 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생합니다.
- Thread 개념
- 프로세스와 다르게 스레드 간 공유가 가능합니다.
- 스레드의 장점
- 성능 개선이 가능합니다.
- 응답성이 향상 됩니다.
- 자원 공유 효율이 높아집니다.(ICP기법을 사용하지 않기 때문)
- 스레드의 단점
- 하나의 스레드 문제로 프로세스 전체에 영향을 미칩니다.
- 동기화 이슈가 있습니다.
- 동기화
- 작업들 사이에 실행 시기를 맞추는 것을 동기화라고 부릅니다.
- Deadlock
- 무한 대기 상태를 뜻합니다.
- Starvation
- 자원을 계속 할당 받지 못하는 상태를 뜻합니다.