본문 바로가기

카테고리 없음

TechStudty -04 멀티 스레드의 특징

멀티 스레드란?

* 아래는 멀티 스레드에 대해 알아보기 전에 알아야할 기초적인 것들의 정의들
프로그램 : 어떤 작업을 하기 위해 실행할 수 있는 파일
프로세스 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체), 운영체제로 부터 시스템 자원을 할당받는 작업의 단위, 즉 동적인 개념으로는 실행된 프로그램을 말한다. 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다.
스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위를 말한다. 프로세스의 특정한 수행 경로이자 프로세스가 할당받은 자원으 이용하는 실행의 단위이다.

일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행한다. 하지만 멀티 스레드란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 또한, 멀티 프로세스는 여러개의 cpu를 사용해서 여러 프로세스를 동시에 수행하는 것을 의미한다.
멀티 스레드와 멀티 프로세스 모두 여러흐름을 동시에 수행한다는 공통점을 가지고 있다. 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 실행되지만, 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다는 점이 다르다.
멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로 시스템 자원의 낭비가 적다. 또한 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다. 


멀티스레드의 장단점

* 장점


1. 응답성 : 예를 들어 채팅프로그램을 멀티스레드화 하면, 채팅의 일부분이 전송이 되지 않거나 큰 파일을 전송하고 있어 

도, 사용자는 다른 스레드를 통해서 다른 사용자와 대화가 가능하다.


2. 자원공유 : 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은, 

한 응용프로그램 같은 주소공간내에서 여러개의 다른 활동성 스레드를 가질 수 있기 때문입니다.


3. 경제성 : 멀티 프로세스처럼 여러개의 프로세스에 메모리와 자원을 할당하면 비용이 많이 발생하지만, 스레드는 

한 프로세스 내에서 자원 ( 데이터, 메모리 등 의 자원)을 공유하기 때문에 경제적입니다.


4. 쓰레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 

공간인 힙(Heap) 영역을 이용하여 데이터를 주고받을 수 있다. 또한 멀티쓰레드에서는 쓰레드간에 

스택영역(메모리의 값이 아닌 주소만 보관)과 힙 영역을 공유합니다.


5. 데이터 영역과 힙 영역을 통해 데이터 교환이 가능하다. 쓰레드 사이에서의 데이터 교환에서는 특별한 기법이 

필요없다. 


* 단점


1. 멀티스레드를 기반으로 할 경우, 동일한 자원에 접근할 수 있기 떄문에 프로그래밍시 신경써줘야한다.


2. 서로 다른 쓰레드가 데이터와 힙 영역을 공유하기 때문에 어떤 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료구조에

접근하여, 엉뚱한 값을 읽어오거나 수정할 수 있습니다. 그렇기 멀티스레드 환경에서는 동기화 작업이 필요합니다.


3. 동기화 작업을 제대로 하지 않으면, 락 문제가 일어날 수 있고, 데이터 병목 현상이 일어날수있습니다.


출처 

https://cafe.naver.com/techinterviewjava/9