2025-09-28 18:24

Tags: 운영체제 자바스크립트

스레드 (Thread)

  • 프로세스 내에서 실행되는 가장 작은 단위로, 자원을 공유하며 동시에 여러 작업을 처리해 프로그램 효율성을 극대화합니다.

  • 프로세스의 자원(코드, 데이터, )을 공유하지만,

  • 각 스레드는 자신만의 호출 스택, 레지스터, 프로그램 카운터를 가져 독립적으로 작동

  • 여러 스레드를 사용할 때 발생할 수 있는 교착 상태경쟁 상태 같은 동기화 문제를 해결하기 위해 뮤텍스, 세마포어 등의 기법

  • 프로세스(Process):

    • 운영체제로부터 자원을 할당받는 작업의 단위.
    • 실행 중인 프로그램의 인스턴스.
    • 공장(Factory)에 비유할 수 있습니다.
  • 스레드(Thread):

    • 프로세스가 할당받은 자원을 이용하여 실제로 작업을 수행하는 실행의 단위.
    • 공장 안에서 일하는 작업자(Worker)에 비유할 수 있습니다.
  • 하나의 프로세스는 반드시 하나 이상의 스레드를 가지며, 이를 ‘메인 스레드(Main Thread)‘라고 부릅니다.

    • 필요에 따라 여러 개의 스레드를 추가로 생성하여 멀티스레딩 환경을 구축할 수 있습니다.
  • 스레드는 프로세스 생성보다 훨씬 적은 비용으로 생성될 수 있고,

    • 문맥 교환 또한 스택과 레지스터 정보만 바꾸면 되므로 프로세스보다 훨씬 빠르다
구분공유 자원 (프로세스 단위)독립 자원 (스레드 단위)
메모리Code 영역, Data 영역, Heap 영역Stack 영역
실행 상태프로세스의 파일 디스크립터, PID 등프로그램 카운터(PC), 레지스터, 스레드 ID
비유공용 주방 시설, 공용 냉장고개인 작업대, 개인 요리 도구, 개인 레시피 북
  • 공유 자원 중에서 한 번에 하나의 스레드만 접근해야 하는 부분을 임계 구역(Critical Section) 이라고 부르며,
    • 동기화는 이 임계 구역을 보호하는 기술

주요 동기화 기법

  1. 뮤텍스(Mutex, Mutual Exclusion)
    • ‘상호 배제’라는 뜻으로, 임계 구역에 오직 하나의 스레드만 들어갈 수 있도록 하는 잠금(Lock) 메커니즘입니다.
      • 화장실에 사람이 있으면 문을 잠그고, 나오면 잠금을 푸는 것과 같습니다.
    • 스레드는 임계 구역에 들어가기 전 락을 획득(acquire)하고, 나올 때 락을 해제(release)합니다.
  2. 세마포어]
    • 뮤텍스가 하나의 스레드만 허용하는 화장실이라면, 세마포어는 여러 칸이 있는 공용 화장실과 같습니다.
    • 동시에 접근 가능한 스레드의 수를 지정할 수 있습니다.
      • 예를 들어, 동시에 3개의 스레드만 접근 가능한 자원이 있다면 세마포어 카운터를 3으로 설정합니다.
      • 스레드가 접근할 때마다 카운터를 1씩 줄이고, 0이 되면 다른 스레드들은 대기해야 합니다.
      • 스레드가 작업을 마치면 카운터를 다시 1 늘립니다.
  3. 모니터]
    • 뮤텍스와 조건 변수(Condition Variable)를 결합한 고수준 동기화 기법입니다.
    • 프로그래머가 락을 걸고 해제하는 것을 신경 쓰지 않아도 되도록 언어 차원에서 동기화를 보장해 줍니다.
    • Java의 synchronized 키워드가 대표적인 예입니다.