멀티 스레드란?
멀티스레드의 장단점
* 장점
1. 응답성 : 예를 들어 채팅프로그램을 멀티스레드화 하면, 채팅의 일부분이 전송이 되지 않거나 큰 파일을 전송하고 있어
도, 사용자는 다른 스레드를 통해서 다른 사용자와 대화가 가능하다.
2. 자원공유 : 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은,
한 응용프로그램 같은 주소공간내에서 여러개의 다른 활동성 스레드를 가질 수 있기 때문입니다.
3. 경제성 : 멀티 프로세스처럼 여러개의 프로세스에 메모리와 자원을 할당하면 비용이 많이 발생하지만, 스레드는
한 프로세스 내에서 자원 ( 데이터, 메모리 등 의 자원)을 공유하기 때문에 경제적입니다.
4. 쓰레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된
공간인 힙(Heap) 영역을 이용하여 데이터를 주고받을 수 있다. 또한 멀티쓰레드에서는 쓰레드간에
스택영역(메모리의 값이 아닌 주소만 보관)과 힙 영역을 공유합니다.
5. 데이터 영역과 힙 영역을 통해 데이터 교환이 가능하다. 쓰레드 사이에서의 데이터 교환에서는 특별한 기법이
필요없다.
* 단점
1. 멀티스레드를 기반으로 할 경우, 동일한 자원에 접근할 수 있기 떄문에 프로그래밍시 신경써줘야한다.
2. 서로 다른 쓰레드가 데이터와 힙 영역을 공유하기 때문에 어떤 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료구조에
접근하여, 엉뚱한 값을 읽어오거나 수정할 수 있습니다. 그렇기 멀티스레드 환경에서는 동기화 작업이 필요합니다.
3. 동기화 작업을 제대로 하지 않으면, 락 문제가 일어날 수 있고, 데이터 병목 현상이 일어날수있습니다.