CS(Computer Science)

스레드(Thread)란?

min민 2025. 1. 1.

스레드(Thread)란?

스레드는 프로세스 내에서 실행되는 최소 단위의 작업 흐름이다.

 

일반적으로 하나의 프로세스는 하나의 스레드를 가지지만, 멀티스레드 환경에서는 여러 스레드가 하나의 프로세스에서 동시에 실행될 수 있다. 스레드는 같은 메모리 공간을 공유하면서 독립적으로 실행되기 때문에 효율적인 병렬 처리가 가능하다.

 

스레드는 CPU 활용도를 높이고, 작업의 응답 속도를 개선하며, 멀티태스킹을 구현할 때 유용하다. 그러나 동시에 여러 작업이 실행되므로 스레드 동기화와 같은 이슈가 발생할 수 있다.

 

 

 

 

 

스레드의 특징

  1. 메모리 공유
    스레드는 하나의 프로세스 내에서 메모리를 공유한다. 전역 변수와 힙 영역을 여러 스레드가 공유하지만, 스택 영역은 독립적이다.
  2. 경량 프로세스
    스레드는 프로세스에 비해 생성 및 종료가 빠르고, context switching 비용이 낮다.
  3. 동기화 이슈
    여러 스레드가 동시에 메모리에 접근하면 데이터 충돌이 발생할 수 있다. 이를 해결하기 위해 뮤텍스(Mutex), 세마포어(Semaphore), 락(Lock) 같은 동기화 도구를 사용한다.
  4. 멀티코어 활용
    멀티코어 CPU 환경에서 스레드는 병렬 처리를 통해 성능을 극대화할 수 있다.

 

 

 

스레드의 종류

  1. 유저 스레드(User Thread)
    애플리케이션 레벨에서 생성되고 관리되는 스레드이다. 운영체제가 아닌 프로세스가 스케줄링을 담당한다.
  2. 커널 스레드(Kernel Thread)
    운영체제가 직접 관리하는 스레드이다. 커널이 스케줄링을 담당하며, 유저 스레드보다 생성과 전환 비용이 크다.
  3. 멀티스레드(Multithreading)
    하나의 프로세스 내에서 여러 스레드가 병렬적으로 작업을 수행하는 환경이다.

 

 

 

스레드 관련 면접 예상 질문

1. 스레드와 프로세스의 차이는 무엇인가?

  • 답변:
    프로세스는 실행 중인 프로그램의 독립적인 단위이고, 각 프로세스는 별도의 메모리 공간을 가진다. 반면, 스레드는 프로세스 내에서 실행되는 작업 흐름의 단위로, 프로세스 내에서 메모리를 공유한다.

2. 멀티스레드의 장점과 단점은 무엇인가?

  • 답변:
    장점: CPU 활용도를 높이고, 응답성을 개선하며, 멀티태스킹을 지원한다.
    단점: 동기화 문제가 발생할 수 있으며, 디버깅이 어렵고, 스레드 생성 및 관리에는 오버헤드가 발생한다.

3. 스레드 동기화는 왜 필요한가? 이를 어떻게 구현할 수 있는가?

  • 답변:
    여러 스레드가 동시에 공유 자원에 접근하면 데이터 충돌이 발생할 수 있다. 이를 방지하기 위해 스레드 동기화가 필요하다. 동기화는 뮤텍스, 세마포어, synchronized 키워드(자바의 경우) 등을 사용해 구현할 수 있다.

4. 스레드의 상태(Lifecycle)에 대해 설명하라.

  • 답변:
    스레드는 다음과 같은 상태를 가진다.
    1. New: 스레드가 생성된 상태로 아직 실행되지 않았다.
    2. Runnable: 실행 가능 상태로, CPU를 기다린다.
    3. Running: CPU를 할당받아 실행 중인 상태이다.
    4. Blocked: 자원을 기다리거나 대기 상태에 있다.
    5. Terminated: 실행이 종료된 상태이다.

5. 스레드 간 통신은 어떻게 이루어지는가?

  • 답변:
    스레드 간 통신은 공유 메모리와 동기화 메커니즘을 통해 이루어진다. Java에서는 wait(), notify(), notifyAll() 메서드를 사용해 스레드 간의 협력을 구현할 수 있다. 또한, BlockingQueue와 같은 데이터 구조를 사용할 수도 있다.

 

 

 

총 정리

스레드는 병렬 처리를 가능하게 하여 성능을 극대화할 수 있는 중요한 개념이다. 하지만 잘못 사용하면 동기화 문제, 교착 상태, 컨텍스트 스위칭 오버헤드 등 여러 문제를 초래할 수 있다.

따라서 스레드의 특성과 동작 원리를 정확히 이해하고 적절한 동기화 기법을 사용하는 것이 중요하다.

 

스레드의 기본 개념뿐만 아니라, 실제 상황에서 발생할 수 있는 문제와 그 해결책에 대한 고민을 꾸준히 해보는것이 필요할것 같다. 

 

 

댓글