본문 바로가기

IT

[IT] 스레드

안녕하세요. 메로나입니다.

 

오늘은 스레드에 관한 내용을 공부하겠습니다.

 

스레드 란?
  • 프로그램이 실행되는 흐름의 단위
  • 하나의 프로세스 내에서 여러 개의 스레드를 실행할 수 있습니다.
  • 이를 통해 프로그램은 동시에 여러 작업이 가능합니다.

 

스레드와 프로세스 차이점?
  • 스레드: 프로세스 내에서 실행되는 작업 단위, 같은 프로세스 내에서 스레드는 메모리를 공유합니다.
  • 프로세스: 실행 중인 프로그램의 인스턴스, 각 프로세스는 독립적인 메모리 공간을 가집니다.

 

싱글 스레드 와 멀티 스레드
  • 싱글 스레드: 하나의 실행 흐름을 가지고, 순차적으로 작업을 수행합니다.
  • 멀티 스레드: 여러 개의 실행 흐름을 가지고, 병렬로 작업을 처리하여 성능 향상이 가능합니다.

 

멀티 스레드가 필요한 이유?
  • 성능 향상: CPU의 여러 코어를 활용하여 작업 속도를 높일 수 있습니다.
  • 응답성 개선: UI가 멈추는 것을 방지하고, 백그라운드 작업을 수행할 수 있습니다.
  • 리소스 절약: 여러 프로세스를 실행하는 것보다 적은 비용으로 동시에 여러 작업을 수행할 수 있습니다.

 

동시성(Concurrency) 와 병렬성(Parallelism)
  • 동시성: 하나의 CPU가 여러 작업을 빠르게 전환하며 실행하는 방식
  • 병렬성: 여러 개의 CPU 코어가 각각 다른 작업을 동시에 실행하는 방식

 

스레드 생성과 생명주기
  • 생성(New): 스레드 객체를 생성하지만 아직 실행되지 않은 상태
  • 실행 가능(Runnable): 스레드가 실행될 준비가 되었지만, CPU를 배정받지 못한 상태
  • 실행(Running): 스레드가 실행 중인 상태
  • 일시 정지(Waiting/Blocked): 특정 조건을 만족할 때까지 대기하는 상태
  • 종료(Terminated): 스레드 실행이 완료되거나 중단된 상태

 

스레드 동기화와 문제점
  • 공유 자원 문제(race condition): 여러 스레드가 같은 자원에 접근할 경우 데이터 정합성이 깨질 수 있습니다.
  • 데이터 정합성: 데이터가 일관되고, 정확하며, 신뢰할 수 있는 상태를 유지하는 것(데이터 손상, 잘못된 상태로 저장하고 있는 상태)

 

스레드 관련 용어
  • 데드락(Deadlock): 두 개 이상의 스레드가 서로 자원을 기다리며 무한 대기
  • 라이브락(Livelock): 스레드가 실행은 되지만, 유용한 작업을 수행하지 못하는 상태
  • 기아상태(Starvation): 우선순위가 낮은 스레드가 CPU 자원을 얻지 못하는 문제

 

스레드의 우선순위 기준은?

운영체제 스케줄러가 스레드를 실행할 때 어떤 스레드를 먼저 실행할지 결정하는 기준이 됩니다. 하지만, 우선순위가 높다고 해서 항상 먼저 실행되는 것은 아니며, 운영체제 스케줄링 정책에 따라 다릅니다.

 

오늘은 스레드 관련하여 공부하였습니다.

기초가 많이 부족한 것 같아 천천히 운영체제를 공부하면서 블로그에 기록할 예정입니다.

감사합니다!!