🚀 스레드의 개념
스레드(Thread)란 프로세스 내에서 실행되는 흐름의 단위를 의미합니다.
일반적으로 하나의 프로그램은 하나의 스레드를 가지고 있지만, 프로그램의 환경에 따라 다수의 스레드를 동시에 실행할 수 있으며 이러한 실행 방식을 멀티스레드(Multi Thread)라고 합니다.
⚖️ 프로세스 vs 스레드
프로세스 : 별도의 메모리 공간에서 실행
스레드 : 동일한 프로세스 내의 공유 메모리 공간에서 실행
📝 스레드의 장단점
장점
- 스레드는 하나의 프로세스 내의 자원(코드, 데이터, 힙)을 공유하기 때문에 프로세스에 비해 자원 할당 비용이 적게 들고 문맥 교환(Context Swtich) 비용도 적게 듦
- 다중 스레드의 경우 일부 스레드의 처리가 지연되더라도 다른 스레드에서 작업을 계속 처리할 수 있음
- 프로세스 간의 통신은 IPC가 필요한 반면, 스레드는 공유(데이터, 힙) 주소 공간을 사용하여 데이터를 교환할 수 있음
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리
단점
- 하나의 스레드에서 발생한 문제가 프로세스 전반에 영향을 미칠 수 있음
- 자원을 공유하기 때문에 동기화 문제가 발생할 수 있음
🔵 스레드의 유형
스레드는 크게 커널 영역과 사용자 영역으로 구분되는데, 이 중 멀티 스레드를 어느 영역에서 구현했느냐에 따라 사용자 수준 스레드와 커널 수준 스레드로 구분할 수 있습니다.
1. 커널 수준 스레드(1 : 1 매핑 방식)
스레드를 OS(커널)이 직접 관리(스레드 생성, 스케줄링 등등)합니다.
장점
- 커널이 각 스레드를 개별적으로 관리
- 프로세스 내 스레드들이 병행 수행 가능
- 하나의 스레드가 block 되어도 다른 스레드는 계속 작업 가능
단점
- 커널 영역에서 스레드의 생성 및 관리
- 문맥 교환으로 인한 오버헤드가 큼
- 사용자 스레드보다 생성 및 관리 속도가 느림
2. 사용자 수준 스레드(N : 1 매핑)
사용자 영역의 스레드 라이브러리로 구현하며, 라이브러리는 스레드의 생성, 스케줄링 담당합니다. 또한 커널은 스레드의 존재를 인식하지 못하기 때문에 커널의 개입을 받지 않습니다.
장점
- 커널의 개입을 받지 않아 스레드의 생성 및 관리의 부하가 적음
- 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠름
- 라이브러리를 통한 이식성이 높음
단점
- 커널은 프로세스 단위로 자원을 할당하기 때문에 하나의 스레드가 block 될 시 모든 스레드가 대기해야 함
(커널이 프로세스의 내부 스레드를 인식하지 못하여 해당 프로세스를 대기상태로 전환시키기 때문)
3. 혼합 스레드(N : M 매핑 방식)
사용자 수준 스레드와 커널 수준 스레드를 혼합한 구조입니다. 일-대-일 방식과 다-대-일 방식의 문제점을 해결하기 위해 고안되었습니다.
장점
- 프로세스 내 스레드들이 병행 수행 가능
- 사용자는 원하는 수만큼 스레드 사용
- 효율적이면서도 유연함
- 스레드 풀링 기법을 통해 일대일 스레드 매핑에서의 오버헤드를 줄여줌
🙄 스레드 풀링?
시스템이 관리하는 스레드의 풀을 응용프로그램에 제공하여 스레드를 효율적으로 사용할 수 있게 하는 방법.
미리 생성한 스레드를 재사용하도록 하여 스레드 생성 시간을 줄이고 시스템 부하를 덜어줍니다. 그리고 동시에 생성할 수 있는 스레드수를 제한하여 시스템의 자원 소비를 줄이고 해당 응용프로그램의 성능을 일정 수준으로 유지할 수 있습니다.
📚 참고 사이트
https://yoongrammer.tistory.com/55
'⚙️OS' 카테고리의 다른 글
[OS] 메모리 단편화(Memory Fragmentation)란? (0) | 2022.06.08 |
---|---|
[OS] 교착상태(Deadlock, 데드락)의 정의, 발생 조건, 해결 방법 (0) | 2022.06.08 |
[ OS] 프로세스의 개념, 상태, 제어 (0) | 2022.05.02 |
[OS] 컴퓨터 시스템의 기본 구성 요소 (0) | 2022.04.25 |
[OS] 운영체제의 구성요소 (0) | 2022.04.25 |