본문 바로가기

웹 개발

싱글 스레드와 멀티 스레드의 장점과 단점

싱글 스레드의 장점과 단점, 멀티스레드의 장점과 단점을 알고 이해한다

 

스레드란?

위키백과의 나와있는 정의를 살펴보자면 스레드란

프로세스 내에서 실행되는 흐름의 단위다

일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다

 

하나의 스레드 방식은 싱글 스레드 방식,

둘 이상의 스레드 방식은 멀티 스레드 방식이라고 한다

 

두 개의 스레드를 실행하고 있는 하나의 프로세스

 

두 개 이상의 멀티 스레드 방식으로 사용하는 게 여러 측면에서 빠르고 좋지 않을까라고 생각 하지만 꼭 그렇지만은 않다

각각 적합한 상황에 맞는 스레드 방식을 사용해야 효율적인 스레드 사용이라고 할 수 있다

 

싱글 스레드와 멀티 스레드의 장점과 단점을 알아보자

 

싱글 스레드의 장점

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

여러 개의 스레드가 공유된 자원을 사용할 경우 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근이 통제되어야 하며 이 작업은 은 프로그래머에게 많은 노력을 요구하고 비용을 발생시킨다

단일 스레드 모델에서는 이러한 작업이 필요하지 않다

 

2. 문맥 교환(context switch) 작업을 요구하지 않는다

문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다

싱글 스레드(단일 스레드)는 이러한 작업이 필요치 않아 효율적이라 할 수 있다

 

3. CPU만을 사용하는 단순한 계산 작업이라면, 싱글 스레드로 프로그래밍하는 것이 더 효율적이다

두 개의 이상의 스레드로 처리하는 경우 오히려 두 개의 스레드로 작업한 시간이 더 걸릴 수 도 있는데, 그 이유는 스레드 간의 작업전환(context switching)에 시간이 걸리기 때문이다

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

싱글 스레드의 단점

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

프로세서를 최대한 활용하게 하려면 cluster 모듈을 사용하거나 외부에서 여러 개의 프로그램 인스턴스를 실행시키는 방법을 사용해야 한다

 

2. 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다

 

멀티 스레드의 장점

1.  멀티 스레드는 응답성을 높여 준다

하나의 프로세스의 여러 스레드를 생성하여 스레드에 각기 다른 작업을 하게 함으로써 특정 작업을 하면서도 사용자로부터 명령을 입력받게 할 수 있다

 

2. 멀티 스레드는 자원 공유 효율성을 높여 준다

프로세스 간 데이터 교환보다 번거로운 작업 없이 더 효율적이다

 

3. 경제성

프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다.

스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 스레드를 생성하고 문맥 교환을 하는 편이 보다 경제적이다

 

멀티 스레드의 단점

1. context switching(작업전환), 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 싱글 스레드 보다
느려질 수 있다

 

2. 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 

다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.

 

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

 

4. 멀티 스레드 모델은 프로그래밍 난이도가 높다. 또한 스레드 수만큼 자원을 많이 사용한다

만일 초보자의 경우, 동일한 프로그램을 만든다면 멀티 스레드의 경우 완성이 힘든 경우도 많다

 

[참고]

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

https://codedragon.tistory.com/3525 원글

https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj 원글

https://student513.tistory.com/74 원글