오늘 뭐했냐/개발에 대한 주저리
23.08.19 쓰레드(thread)
스스로에게
2023. 8. 27. 22:25
쓰레드(thread)는 컴퓨터 프로그래밍과 운영체제에서 사용되는 기초 개념입니다. 쓰레드는 프로세스(process) 내에서 실행되는 작은 단위로, 한 프로세스 안에는 하나 이상의 쓰레드가 있을 수 있습니다. 각 쓰레드는 자신만의 레지스터, 스택, 프로그램 카운터 등을 가지며, 메모리와 파일, 그 외 자원들은 프로세스 내의 다른 쓰레드와 공유됩니다.
쓰레드의 특징
- 가벼움: 쓰레드는 프로세스에 비해 생성과 제거가 빠르고, 적은 자원을 사용합니다.
- 자원 공유: 같은 프로세스 내의 쓰레드들은 코드, 데이터, 힙 영역 등을 공유합니다.
- 응답성 향상: 하나의 작업이 지연될 때, 다른 쓰레드가 독립적으로 실행될 수 있습니다.
- 멀티코어 활용: 멀티코어 프로세서에서는 여러 쓰레드가 동시에 실행될 수 있어 성능이 향상됩니다.
쓰레드의 종류
- User-Level Threads (사용자 수준 쓰레드): 운영체제의 지원 없이 사용자 라이브러리를 통해 구현됩니다.
- Kernel-Level Threads (커널 수준 쓰레드): 운영체제가 직접 관리하며, 더 안정적이지만 자원을 더 사용합니다.
쓰레드와 관련된 문제들
- Deadlock (데드락): 두 개 이상의 쓰레드가 서로를 기다리는 상황
- Race Condition (경쟁 조건): 여러 쓰레드가 동시에 공유 자원에 접근할 때 발생하는 문제
- Starvation (기아): 일부 쓰레드가 너무 오랫동안 자원을 점유하면 다른 쓰레드가 자원을 얻지 못하는 상황
주요 용어
- Context Switching (문맥 교환): CPU가 하나의 쓰레드에서 다른 쓰레드로 작업을 전환할 때 발생하는 오버헤드
- Thread Pool (쓰레드 풀): 미리 생성된 쓰레드의 집합. 쓰레드 생성/소멸의 오버헤드를 줄이기 위해 사용됩니다.
쓰레드는 병렬 처리를 통해 성능을 높일 수 있지만, 동기화 문제와 같은 복잡한 이슈도 많이 발생시킵니다. 따라서 멀티쓰레딩을 구현할 때는 주의가 필요합니다.