nickjoIT

스레드와 프로세스의 차이점 본문

PROGRAMING/JAVA

스레드와 프로세스의 차이점

nickjo 2016. 2. 12. 10:50

1. 프로세스

- 멀티 프로세싱을 지원하는 운영체제에서는 동시에 여러 프로그램을 실행 할 수 있다. 그때 실행 중인 프로그램에 대한 인스턴스를 프로세스라고한다.

- 프로세스는 프로그램에 대한 각각의 인스턴스를 의미하므로, 같은 프로그램을 여러개 띄웠다고 해서 하나의 프로세스를 공유하는 것은 아니다.

- 프로세스는 운영체제로 부터 주소공간, 파일, 메모리 등을 할당 받는다.


2. 스레드

- 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세서 내의 주소 공간이나 자원들을 대부분 공유 하면서 실행된다.

- 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성된다. 이를 메인 스레드라고 부르며, 스레드를 추가로 생성하지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행된다.

- 프로세스는 여러개의 스레드를 가질 수 있으며 이를 멀티 스레드라고 한다.


3. 프로세스와 스레드의 차이점

- 프로세스는 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않는다.

- 스레드는 해당 스레드를 위한 스택을 생성할 뿐 그 이외의 Code, Data, Heap영역을 공유한다.


1) 스택을 독립적으로 할당하는 이유

- 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.

- 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다.

- 결과적으로 실행 흐름의 추가를 위한 최소 조건이 독립된 스택을 제공하는 것이다.


2) 코드 영역을 공유

- 프로세스는 독립적인 구조이기 때문에 다른 프로세스의 Code영역에 있는 함수를 호출할 수 없다.

- 스레드는 Code영역을 공유하기 때문에 두개 이상의 쓰레드가 자신이 포함된 프로세스의 Code영역에 있는 함수를 호출할 수 있다.


3) 데이터 영역과 힙 영역을 공유

- 전역 변수와 동적 할당된 메모리 공간을 공유할 수 있고, 이를 통해 쓰레드 간 통신을 할 수 있다.

- 대신 동시에 메모리에 접근하기 때문에 주의 해야 한다.


4. 스레드의 장점

- 시스템의 throughput이 향상된다.

- 시스템의 자원 소모가 줄어든다.

- 프로그램의 응답 시간이 단축된다.

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


5. 스레드의 단점

- 여러개의 스레드를 이용하는 프로그램을 작성하는 경우에는 주의 깊게 설계해야한다. 미묘한 시간차나 잘못된 변수를 공유함으로써 오류가 발생할 수 있다. 따라서 스레드 간에 통신할 경우에는 충돌 문제가 발생하지 않도록 동기화 문제를 해결해야 한다.

- 프로그램 디버깅이 어렵다.

- 단일 프로세스 시스템에서는 효과를 기대하기 어렵다.


[참고사이트]

http://hso9201.tistory.com/212

http://ralf79.tistory.com/34#_



'PROGRAMING > JAVA' 카테고리의 다른 글

람다식  (0) 2016.03.09
지네릭스(Generics)  (0) 2016.03.08
컬렉션 프레임워크란 무엇인가  (0) 2016.02.18
String과 StringBuffer의 차이점  (0) 2016.02.18
일반예외 && 실행예외  (0) 2016.02.06
Comments