롸?
프로세스(Process)와 스레드(Thread) 본문
프로세스(Process) : OS에서 실행 중인 하나의 애플리케이션. 사용자가 애플리케이션을 실행하면 OS로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것이 프로세스이다.
스레드(Thread) : 사전적 의미로는 한 가닥의 실이라는 뜻인데, 한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어 놓았다고 해서 유래된 이름이다. 하나의 스레드는 하나의 코드 실행 흐름이기 때문에 한 프로세스 내에 스레드가 두 개라면 두 개의 실행 흐름이 생긴다는 의미이다.
프로세스는 각각 독립된 메모리 구조를 가지며 코드영역(code), 전역변수가 할당되는 '데이터영역(data)', malloc 함수 등에 의해 동적할당이 이루어지는 '힙(heap)', 그리고 함수의 실행에 사용되는 '스택(stack)'으로 이루어진다. 따라서 프로세스들은 서로의 자원에 접근할 수 없으며, 서로의 자원에 접근하기 위해서는 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)
둘 이상의 실행 흐름을 갖는 것이 목적이라면, 프로세스처럼 완전히 메모리 구조로 분리시킨 것이 아니라, 스택 영역만을 분리시킴으로써 다음의 장점을 얻을 수 있다.
-
컨텍스트 스위칭시 데이터 영역과 힙은 올리고 내릴 필요가 없다.
-
데이터 영역과 힙을 이용해서 데이터를 교환할 수 있다.
그래서 등장한 것이 스레드이며, 지금 설명한 것처럼 모든 쓰레드는 별도의 실행 흐름을 유지하기 위해서 스택 영역만 독립적으로 유지한다.
-
장점
-
시스템의 자원소모과 줄어든다.
-
프로그램의 응답 시간이 단축된다.
-
프로세스 간 통신 방법에 비해 스레드간의 통신 방법이 더 간단하다.
-
-
단점
-
프로세스 밖에서 각 스레드를 제어할 수 없다.
-
여러 개의 스레드를 이용하는 프로그램을 작성하는 경우 저의 깊게 설계해야 한다.
-
프로그램 디버깅이 어렵다.
-
정리하자면
-
프로세스 : 운영체제 관점에서 별도의 실행 흐름을 구성하는 단위
-
스레드 : 프로세스 관점에서 별도의 실행 흐름을 구성하는 단위
프로세스가 하나의 운영체제 안에서 둘 이상의 실행 흐름을 형성하기 위한 도구라면, 스레드는 하나의 프로세스 내에서 둘 이상의 실행 흐름을 형성하기 위한 도구로 이해 할 수 있다.
참고
1. https://gmlwjd9405.github.io/2018/09/14/process-vs-thread
'프로그래밍 > JAVA' 카테고리의 다른 글
선택정렬, 버블정렬 (0) | 2020.02.07 |
---|---|
Thread 간단 코드와 관련 메소드 (0) | 2020.02.05 |
컬렉션(collection) (0) | 2020.02.04 |
DAO, DTO, VO (0) | 2020.02.04 |
Wrapper 클래스 (0) | 2020.02.04 |