✅ Thread(스레드)

Light Weight Process 라고 부르기도 합니다.
작은 범위에서 스레드(thread)는 프로세스 내에서 실행되는 작업 흐름의 단위를 말합니다.
더 확장되어 CPU에서 실행되는 단위이다.

✏️ 스레드의 특징

  • 프로세스는 두 개 이상의 스레드를 가질 수 있습니다.
    • 병렬적으로 작업을 처리할 수 있습니다.
  • 같은 프로세스에 있는 스레드들끼리 컨텍스트 스위칭이 가볍다.
    • 스레드는 위 사진처럼 data 등을 공유하고 있고 stack, register block 영역만 나눠져있기 때문에 그 부분만을 CPU 레지스터에 교체해주면 된다. 그러므로 프로세스 간의 컨텍스트 스위칭보다 비용이 훨씬 적다.
  • 스레드간 데이터 통신이 쉽다.
    • 위 사진처럼 스레드들은 자신들이 속한 프로세스의 메모리 영역 (data, code 영역 등)을 공유하고 있기 때문에 통신할 데이터를 이 공유 영역에 올리기만 하면 된다. 프로세스처럼 IPC같은 특별한 기법이 필요하지 않다.

1️⃣ 프로세스와 스레드의 차이점


프로세스

  • 프로세스는 각 프로세스의 데이터 접근이 불가합니다.

스레드

  • 하나의 프로세스에 여러개의 스레드를 생성 가능합니다.
  • 스레드들은 동시에 실행이 가능합니다.
  • 프로세스 안에 있기 때문에 프로세스의 데이터를 모두 접근이 가능합니다.

2️⃣ Multi Thread (멀티 스레드)

소프트웨어 병행 작업 처리를 위해 멀티 스레드를 사용합니다.


멀티 스레드를 사용하는 이유
1. 멀티 스레드는 각 스레드가 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적습니다.
2. 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아집니다.


3️⃣ Thread 장점

  • 사용자에 대한 응답성 향상
    • 프로세스가 여러 스레드로 분할된 경우 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리가 가능합니다.
  • 자원 공유 효율
    • 프로세스 자원 공유를 위해 IPC기법과 같이 번거러운 작업이 필요 없습니다.
    • 프로세스 안에 있기 때문에 프로세스의 데이터를 모두 접근할 수 있습니다.
  • 다중 처리로 성능 향상
    • 단일 프로세스에 다중 스레드가 있는 경우 다중 프로세서에서 다중 스레드를 예약할 수 있습니다.

3️⃣ Thread 단점

  • 전체 영향
    • 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받습니다.
  • 성능 저하
    • 스레드를 많이 생성할 경우, 모든 스레드를 스케줄링해야 하기 때문에 콘텍스트 스위칭이 빈번하게
      일어나기 때문에 성능이 저하됩니다.
  • 동기화 이슈
    • 동기화 코드를 적절히 추가해줘야 동기화 이슈가 일어나지 않습니다.

✅ 동기화

작업들 사이에 실행 시기를 맞추는 것을 동기화라고 부릅니다.

1️⃣ 동기화 이슈란?

여러 스레드가 동일한 데이터에 접근 시 동기화 이슈가 발생합니다.
동일 자원을 여러 스레드가 동시 수정 시 각 스레드 결과에 영향을 줍니다.

2️⃣ 동기화 이슈 해결 방안


  • Mutual exclusion(상호 배제)
    • 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Acces가 필요합니다.
    • 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근을 하지 못하도록 막습니다.

3️⃣ Locking Mechanism 의 종류


  • Mutex(binary Semaphore) : 임계 구역에 스레드 하나만 들어갈 수 있습니다.
  • Semaphore : 임계 구역에 여러 스레드가 들어갈 수 있습니다. - counter를 두어 허용 가능한 스레드 수를 제어해야 합니다.

✅ Deadlock과 Starvation

✏️ Deadlock 이란?

무한 대기 상태를 뜻합니다.
두 개 이상의 작업이 서로 상대방의 작업이 끝나기를 기다리고 있기 때문에 다음 단계로 진행하지 못합니다.

Deadlock 상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생합니다.


✏️ Starvation 이란?

특정 프로세스의 우선 순위가 낮아 원하는 자원을 계속 할당 받지 못하는 상태를 뜻합니다.

Starvation 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생합니다.


❗️ Starvation상태 해결 방안

  • 우선 순위 변경하기
    • 프로세스의 우선순위를 수시로 변경하여 각 프로세스가 높은 우선순위를 가질 기회를 줍니다.
    • 오래 기다린 프로세스의 우선 순위를 높여줍니다.
    • 요청 순서대로 처리하는 FIFO 기반의 요청 큐를 사용합니다.

💡 총 정리

  • Thread 개념
    • 프로세스와 다르게 스레드 간 공유가 가능합니다.
  • 스레드의 장점
    • 성능 개선이 가능합니다.
    • 응답성이 향상 됩니다.
    • 자원 공유 효율이 높아집니다.(ICP기법을 사용하지 않기 때문)
  • 스레드의 단점
    • 하나의 스레드 문제로 프로세스 전체에 영향을 미칩니다.
    • 동기화 이슈가 있습니다.
  • 동기화
    • 작업들 사이에 실행 시기를 맞추는 것을 동기화라고 부릅니다.
  • Deadlock
    • 무한 대기 상태를 뜻합니다.
  • Starvation
    • 자원을 계속 할당 받지 못하는 상태를 뜻합니다.
profile
#UXUI #코린이

0개의 댓글