Os
16 May 2020

멀티 스레드

멀티 스레딩

멀티 스레딩의 장점

프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우 메모리 공간과 시스템 자원소모가

줄어들게 된다. 스레드간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의

공간 또는 동적으로 할당된 공간인 Heap영역을 이용하여 데이터를 주고 받을 수 있다. 그리고

프로세스간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.

뿐만 아니라 스레드의 context switch는 프로세스의 context switch와 달리 캐시 메모리를 비울 필요가 없기

때문에 더 빠르다. 따라서 시스템의 throughput이 향상되고 자원소모가 줄어들며 프로그램의 응답시간이 단축된다.

이러한 장점때문에 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 여러 스레드로 나누어 수행하는 것이다.


멀티 스레딩의 문제점

멀티스레딩 기반으로 프로그래밍을 할경우 서로 다른 스레드가 데이터와 힙영역을 공유하기

때문에 어떤 스레드가 다른 스레드가 사용중인 변수나 자료에 접근하여 잘못된 값을 읽어 오거나 수정할 수 있다.

그렇기 때문에 멀티스레딩 기반의 프로그래밍을 할때는 동기화를 신경써줘야 한다

동기화를 통해 작업 처리 순서를 컨트롤하고 공유자원에 대한 접근을 제어하는 것이다.

하지만 이로 인해 병목현상이 발생해 성능이 저하될 수 있다. 그러므로 락을 적절하게 걸어야한다.


멀티 스레드 vs 멀티 프로세스

멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 context switch가 빠르다는

장점이 있지만 오류로 인해 하나의 스레드가 종료되면 전체스레드가 종료 될 수 있다는 점과

동기화문제를 갖고 있다. 반면 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에는

영향을 끼치지 않기 때문에 정상적으로 수행되지만 멀티 스레드보다 많은 메모리 공간과 cpu시간을 차지한다는

단점이 있다. ex) 익스플로러(멀티 스레드)와 크롬(멀티 프로세스)이 대표적인 예이다


Tags:
0 comments