스레드(Thread)란?
스레드는 프로세스 내에서 실행되는 최소 단위의 작업 흐름이다.
일반적으로 하나의 프로세스는 하나의 스레드를 가지지만, 멀티스레드 환경에서는 여러 스레드가 하나의 프로세스에서 동시에 실행될 수 있다. 스레드는 같은 메모리 공간을 공유하면서 독립적으로 실행되기 때문에 효율적인 병렬 처리가 가능하다.
스레드는 CPU 활용도를 높이고, 작업의 응답 속도를 개선하며, 멀티태스킹을 구현할 때 유용하다. 그러나 동시에 여러 작업이 실행되므로 스레드 동기화와 같은 이슈가 발생할 수 있다.
스레드의 특징
- 메모리 공유
스레드는 하나의 프로세스 내에서 메모리를 공유한다. 전역 변수와 힙 영역을 여러 스레드가 공유하지만, 스택 영역은 독립적이다. - 경량 프로세스
스레드는 프로세스에 비해 생성 및 종료가 빠르고, context switching 비용이 낮다. - 동기화 이슈
여러 스레드가 동시에 메모리에 접근하면 데이터 충돌이 발생할 수 있다. 이를 해결하기 위해 뮤텍스(Mutex), 세마포어(Semaphore), 락(Lock) 같은 동기화 도구를 사용한다. - 멀티코어 활용
멀티코어 CPU 환경에서 스레드는 병렬 처리를 통해 성능을 극대화할 수 있다.
스레드의 종류
- 유저 스레드(User Thread)
애플리케이션 레벨에서 생성되고 관리되는 스레드이다. 운영체제가 아닌 프로세스가 스케줄링을 담당한다. - 커널 스레드(Kernel Thread)
운영체제가 직접 관리하는 스레드이다. 커널이 스케줄링을 담당하며, 유저 스레드보다 생성과 전환 비용이 크다. - 멀티스레드(Multithreading)
하나의 프로세스 내에서 여러 스레드가 병렬적으로 작업을 수행하는 환경이다.
스레드 관련 면접 예상 질문
1. 스레드와 프로세스의 차이는 무엇인가?
- 답변:
프로세스는 실행 중인 프로그램의 독립적인 단위이고, 각 프로세스는 별도의 메모리 공간을 가진다. 반면, 스레드는 프로세스 내에서 실행되는 작업 흐름의 단위로, 프로세스 내에서 메모리를 공유한다.
2. 멀티스레드의 장점과 단점은 무엇인가?
- 답변:
장점: CPU 활용도를 높이고, 응답성을 개선하며, 멀티태스킹을 지원한다.
단점: 동기화 문제가 발생할 수 있으며, 디버깅이 어렵고, 스레드 생성 및 관리에는 오버헤드가 발생한다.
3. 스레드 동기화는 왜 필요한가? 이를 어떻게 구현할 수 있는가?
- 답변:
여러 스레드가 동시에 공유 자원에 접근하면 데이터 충돌이 발생할 수 있다. 이를 방지하기 위해 스레드 동기화가 필요하다. 동기화는 뮤텍스, 세마포어, synchronized 키워드(자바의 경우) 등을 사용해 구현할 수 있다.
4. 스레드의 상태(Lifecycle)에 대해 설명하라.
- 답변:
스레드는 다음과 같은 상태를 가진다.- New: 스레드가 생성된 상태로 아직 실행되지 않았다.
- Runnable: 실행 가능 상태로, CPU를 기다린다.
- Running: CPU를 할당받아 실행 중인 상태이다.
- Blocked: 자원을 기다리거나 대기 상태에 있다.
- Terminated: 실행이 종료된 상태이다.
5. 스레드 간 통신은 어떻게 이루어지는가?
- 답변:
스레드 간 통신은 공유 메모리와 동기화 메커니즘을 통해 이루어진다. Java에서는 wait(), notify(), notifyAll() 메서드를 사용해 스레드 간의 협력을 구현할 수 있다. 또한, BlockingQueue와 같은 데이터 구조를 사용할 수도 있다.
총 정리
스레드는 병렬 처리를 가능하게 하여 성능을 극대화할 수 있는 중요한 개념이다. 하지만 잘못 사용하면 동기화 문제, 교착 상태, 컨텍스트 스위칭 오버헤드 등 여러 문제를 초래할 수 있다.
따라서 스레드의 특성과 동작 원리를 정확히 이해하고 적절한 동기화 기법을 사용하는 것이 중요하다.
스레드의 기본 개념뿐만 아니라, 실제 상황에서 발생할 수 있는 문제와 그 해결책에 대한 고민을 꾸준히 해보는것이 필요할것 같다.
'CS(Computer Science)' 카테고리의 다른 글
네트워크 기본 개념 Socket 통신: OSI 7 계층 (0) | 2025.01.01 |
---|---|
프로세스란 무엇인가? (0) | 2025.01.01 |
컴퓨터와 프로그래밍의 이해 + 컴퓨터 기초 용어 정리 [DAY2] (0) | 2022.12.16 |
댓글