오늘 뭐했냐/개발에 대한 주저리

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 (쓰레드 풀): 미리 생성된 쓰레드의 집합. 쓰레드 생성/소멸의 오버헤드를 줄이기 위해 사용됩니다.

 

쓰레드는 병렬 처리를 통해 성능을 높일 수 있지만, 동기화 문제와 같은 복잡한 이슈도 많이 발생시킵니다. 따라서 멀티쓰레딩을 구현할 때는 주의가 필요합니다.