Sam Story

싱글스레드 , 멀티스레드 (Single Thread , Multi Thread) 본문

개발지식

싱글스레드 , 멀티스레드 (Single Thread , Multi Thread)

Sam H 2024. 4. 17. 15:53

1. 스레드란 ?

프로세스가 할당받은 자원을 이용하는 실행의 단위

 

한 프로세스 내에서 동작되는 여러 실행 흐름

 

멀티 스레드의 경우 스레드 간의 자원을 공유하고 자원의 생성과

관리의 중복성을 최소화하여 수행 능력을 향상시킨다.

 

각각의 스레드는 독립적인 작업을 수행한다.

 

※  프로세스란 ?

실행중에 있는 프로그램을 의미한다. (프로세스에 관한건 나중에 따로 다뤄보겠다.)

 

 

2. 싱글스레드와 멀티스레드

 

간단한 그림을 통해 먼저 싱글스레드와 멀티 스레드에 대해서 알아보면

싱글 스레드와 멀티 스레드

 

 

이처럼 메인스레드 에서는 한가지 작업이 순차적으로 진행되는 반면에

 

멀티 스레드에 경우는 여러작업이 동시에 진행된다.

 

그럼 단순하게 생각하면 싱글 스레드보다 멀티 스레드가 좋은것이 아닌가 ?

 

라는 생각이 들 수 있겠지만 두가지의 장단점을 통해 다른 이유를 알아보자.

 

 

 

3. 멀티 스레드의 장단점

장점

- 응답성 : 프로그램의 일부분(스레드 중 하나)이 중단되거나 긴 작업을 수행하더라도

프로그램의 수행이 계속되어 사용자에 대한 응답성이 증가한다.

 

다시 말해서, 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복한다.

 

다만 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용이 발생한다.

(싱글 스레드는 프로그램 일부분이 중단되거나, 에러가 발생하면 프로그램이 멈춘다.)

 

- 경제성 : 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원

소모가 줄어든다. 스레드 간 통신이 필요한 경우에도 쉽게 데이터를 주고 받을 수 있다.

 

- 멀티프로세서의 활용 : 각각의 스레드가 다른 프로세스에서 병렬로 수행될 수 있으므로

한번에 여러작업들을 처리할 수 있다.

단점

- 동기화 등의 이유로 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해

단일 스레드 보다 느리다.

 

- 공유하는 자원에 동시에 접근하는 경우 프로세스와 달리 스레드는 데이터와 힙 영역을

공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여

엉뚱한 값을 읽어오거나 수정할 수 있다.

 

- 멀티 스레등을 위해서는 운영체제의 지원이 필요하다.

 

- 멀티 스레드 모델은 프로그래밍 난이도가 높다.

또한 스레드 수만큼 자원을 많이 사용한다.

 

 

4. 싱글 스레드의 장단점

장점

- Context Switch 작업을 요구하지 않는다

여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은

비용을 필요로 한다.

 

- 자원 접근에 대한 동기화를 신경쓰지 않아도 된다.

 

- 단순히 CPU만을 사용하는 계산작업이라면 오히려 싱글스레드가 효율적이다

ex) 두개의 작업을 하나의 스레드로 처리 vs 두개의 스레드로 처리하는 경우

 

후자의 경우에는 짧은 시간동안 2개의 스레드가 번갈아 가면서 작업을 수행한다.

그래서 동시에 작업이 처리되는것 과 같이 느끼게 된다.

 

하지만 오히려 두개의 스레드로 작업한 시간이

싱글 스레드로 작업한 시간보다 더 걸릴 수도 있는데

그 이유가 앞서 말했던 Context Switch에 시간이 걸리기 때문이다.

 

다시 말해서 단순히 CPU 만을 사용하는 작업은 싱글 스레드가 멀티 스레드보다 빠르다.

 

- 프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용한다 (코스트가 적게든다)

 

단점

- 여러 개의 CPU를 활용하지 못한다.

 

- 연상량이 많은 작업을 하는 경우 그작업이 완료되어야 다음 작업을 수행할 수 있다.

 

- 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춘다.

 

 

 

싱글 스레드와 멀티 스레드의 장단점에 대해서 인지를 하고 있다면 특정 경우에

 

어떤 스레드로 프로그래밍을 할지 고민할 시간이 줄어든다고 생각한다.

'개발지식' 카테고리의 다른 글

아파치 (Apache)  (1) 2024.05.01
동기 , 비동기 (Synchronous , Asynchronous)  (0) 2024.04.24
디자인 패턴 (Design Pattern)  (0) 2024.04.14
AAC (Android Architecture Component)  (0) 2024.03.30
소켓(Socket) 통신  (0) 2024.02.20