멀티 스레딩의 장단점

ideafy·2025년 9월 22일

CS

목록 보기
13/17

멀티 스레딩이란?

하나의 프로세스에서 다수의 실행 단위(스레드)로 구분하여 자원을 공유하고, 자원의 생상관 관리의 중복을 최소화하여 수행능력을 향상하는 것.

멀티 스레딩은 스레드 수준뿐 아니라 명령어 수준의 병렬 처리에까지 신경을 쓰면서 하나의 코어에 대한 이용성을 증가하는 것에 초점을 두고 있다.

멀티 스레드를 사용하는 이유

메모리 공간과 시스템 자원 소모가 줄어들게 된다.
스레드 간의 통신이 필요한 경우 별도의 자원을 사용하는 것이 아니라 전역 변수 공간이나 동적으로 할당된 힙 영역을 이용해 데이터를 주고 받을 수 있다.

또 스레드의 문맥 교환(컨텍스트 스위칭)은 프로세스와 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다. 따라서 시스템의 처리량이 향상되고 자원소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축된다.

이러한 장점들 덕분에 여러 개의 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 스레드로 나눠서 수행하는 것이다.

장점

1. 응답성

대화형 프로그램을 멀티스레드화하면, 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어, 사용자에 대한 응답성이 증가된다. 예를 들어, 멀티스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에 사용자와의 상호 작용이 가능하다.

2. 자원 공유

스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은, 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 스레드를 가질 수 있다는 점이다.

3. 경제성

프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다. 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 스레드를 생성하고 문맥교환을 하는 편이 보다 경제적이다.

4. 멀티프로세서 활용

멀티프로세서 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 스레드 프로세스는 CPU가 많아도 CPU 한개에서만 실행된다. 즉, 다중 스레드화를 하면 다중 CPU에서 병렬성이 증가된다.

단점

1. 동기화 문제

스레드들은 데이터 영역과 힙 같은 메모리 공간을 공유하기 때문에, 여러 스레드가 동시에 같은 자원에 접근하면 경쟁 조건(Race Condition) 발생하고 이는 데이터 불일치, 프로그램의 예측 불가 동작으로 이어질 수 있다.

2. 교착 상태 (Deadlock)

스레드들이 각각 자원을 확보한 채 서로가 가진 자원을 기다린 채 무한 대기 상황 발생하면 프로그램 멈춤, 시스템 성능 저하가 발생할 수 있다.

3. 디버깅 난이도

스레드 실행 순서는 스케줄러에 의해 결정되므로 실행할 때마다 동작 순서가 달라진다.
그래서 처리 순서가 중요한 작업에서는 버그가 간헐적으로 발생할 수 있고 버그를 해결하기 위한 재현이 어려워 디버깅이 까다롭다는 단점이 있다.

4. 문맥교환 비용은 여전히 존재

스레드의 문맥교환 비용은 여전히 프로세스보다 싸지만, 레지스터/스택 교체와 커널 개입은 필요하다. 스레드 수가 과도하면 오히려 성능 저하가 발생한다.(스레싱 현상).

5. 한 스레드의 오류가 전체 프로세스에 영향을 줌

스레드는 프로세스의 주소 공간을 공유하므로, 한 스레드가 잘못된 메모리를 참조하거나 세그폴트를 내면 프로세스 전체가 종료되기 때문에 스레드에서 하나의 작은 오류가 전체 서비스 장애로 이어질 수 있다.

출처: https://ko.wikipedia.org/wiki/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%94%A9

profile
재밌게 공부하고 싶어요

0개의 댓글