스레드
•
프로세스 내에서 실행되는 흐름의 단위.
•
각 스레드는 프로세스의 자원을 공유하면서 독립적인 실행 흐름을 가진다.
•
모든 프로세스는 최소 하나 이상의 스레드가 존재한다.
프로세스와의 차이점
프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
스레드 : 프로세스 내에서 실행되는 더 작은 단위
•
장점
◦
스레드는 자원을 공유하기 때문에 커뮤니케이션이 용이하다.
◦
프로세스보다 생성과 전환 비용이 적다.
•
단점
◦
자원을 공유하기 때문에 데이터의 일관성을 유지하기 위한 동기화가 필요하다.
◦
따라서 복잡성이 증가할 수 있다.
멀티스레딩
•
하나의 프로세스 내에서 여러 스레드를 동시에 실행하는 기술
•
장점
◦
여러 작업을 병렬로 처리함으로써 자원의 활용도가 높아진다.
◦
동시성
•
단점
◦
스레드 간의 동기화 문제와 데이터 공유로 인한 복잡성이 증가한다.
◦
한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있다.
동기화 기법
•
락(Lock), 세마포어(Semaphore), 모니터(Monitor) 등의 동기화 기법을 통해 스레드 간의 안전한 자원 공유와 동시성 문제를 해결할 수 있다.
•
락 (Lock)
◦
동시에 여러 스레드가 같은 자원에 접근하는 것을 방지하기 위해 사용되는 동기화 메커니즘
◦
한 스레드가 특정 자원을 사용하고 있을 때, 그 자원에 대한 락을 걸어 다른 스레드가 동시에 접근하지 못하도록 한다.
◦
한 스레드가 자원을 사용하기 시작할 때 락을 획득하고, 작업이 끝나면 락을 해제한다. 락이 걸린 자원에 다른 스레드가 접근하려 하면 락이 해제될 때까지 대기하게 된다.
•
세마포어 (Semaphore)
◦
락과 비슷하지만, 동시에 여러 스레드가 자원에 접근할 수 있도록 허용하는 정수 값으로 관리되는 동기화 메커니즘
◦
세마포어의 값은 접근 가능한 최대 스레드 수를 의미한다.
◦
스레드가 자원에 접근하려면 세마포어를 ‘감소’시키고, 작업이 끝나면 ‘증가’시킨다. 세마포어의 값이 0이면, 추가 스레드의 접근이 불가능하며 대기상태로 전환된다.
•
모니터 (Monitor)
◦
락과 조건 변수를 이용하여 스레드 간의 동기화를 수행하는 동기화 메커니즘
◦
모니터 내에서는 한 번에 하나의 스레드만이 작업을 수행할 수 있으며, 조건 변수를 사용해 특정 조건 하에 스레드를 대기시키거나 깨울 수 있다.
◦
스레드가 모니터의 메서드를 호출하면, 자동으로 락을 획득하게 된다. 작업을 마친 후 락을 해제하며, 조건 변수를 통해 다른 스레드의 실행을 조정할 수 있다.
적용 사례
•
웹 서버
◦
동시에 많은 요청을 처리할 수 있도록 멀티스레딩 활용
•
멀티미디어 처리
◦
비디오 인코딩, 렌더링 등 멀티미디어 처리 작업은 멀티스레딩을 통해 성능을 크게 향상시킬 수 있음
•
게임 개발
◦
게임의 물리 엔진, 그래픽 렌더링, 사용자 입력 처리 등을 동시에 수행하기 위해 멀티스레딩이 사용된다.
•
실시간 시스템
◦
실시간 데이터 처리를 필요로 하는 시스템에서 멀티스레딩은 중요한 역할을 한다.