nickjoIT
스레드와 프로세스의 차이점 본문
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 |