스레드
한 프로세스 내에서 실행되는 흐름의 단위입니다.
스레드 분류
스레드는 크게 두 가지로 나뉩니다.
- 사용자 수준 스레드 (ULT) : 스레드 라이브러리(ex, pthread)를 사용하므로 운영체제 구분 없이 적용 가능, 그러나 스레드의 시스템 호출 수행 시 해당 스레드를 포함한 프로세스 내 다른 모든 스레드 블록 -> 성능 상 이점 별로
- 커널 수준 스레드 (KLT) : 같은 프로세스 내 다른 스레드 사용 가능 -> 성능 상 이점
멀티 스레드
한 프로세스 내에서 단일 스레드가 아닌 2개 이상의 스레드를 사용하는 경우 이를 멀티 스레드로 부릅니다. 멀티 스레드는 일반적으로 성능 향상에 이점이 있습니다. 각 스레드는 각각의 다른 CPU를 활용할 수 있는데, 이런 특징은 CPU를 덜 놀게 합니다.
또한 새 프로세스를 생성하는 것보다 새 스레드를 생성하는 것이 더 효율적입니다.
스레드 문맥 교환
CPU 코어 갯수보다 많은 스레드를 사용하는 경우 코어는 스레드 문맥 교환을 통해 스레드들을 번갈아 가며 수행합니다.
멀티 스레드의 문제
멀티 스레드는 크게 두 가지 문제를 가지고 있습니다.
- 실행 순서가 약속되지 않음 : 매 실행 시 작업 가능한 코어의 상황이 다르므로 스레드들의 실행 순서가 다를 수 있습니다.
- 경쟁 조건 : 멀티 스레드는 공유된 자원을 활용할 수 있는 장점이 있지만 이러한 특성은 오히려 문제가 될 수 있습니다. 실행 순서가 보장되지 않으므로 공유된 자원을 활용하는 경우 올바르지 않은 결과를 야기할 수 있습니다.
이러한 문제를 해결하기 위해 mutex, semaphore 등을 활용할 수 있습니다.
출처
'컴퓨터공학 & 정보통신' 카테고리의 다른 글
[아키텍처] REST 아키텍처와 RESTful API에 대한 이해 (0) | 2023.08.11 |
---|---|
[노트] 23-08-10 CS 대비 노트 (0) | 2023.08.10 |
[디자인패턴] 어댑터(Adapter) 패턴에 대한 이해 (0) | 2023.08.09 |
[디자인패턴] 싱글톤(Singleton) 패턴에 대한 이해 (0) | 2023.08.09 |
[알고리즘/기초] 피보나치 수 (0) | 2023.08.05 |