프로세스와 스레드의 차이
1. 프로그램(Program)이란 ?
- 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태이며 어떠한 작업을 위해 실행할 수 있는 파일을 뜻한다.
2. 프로세스(Process)란?
- 프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램으로 메모리에 올라가서 실행되고 있는 프로그램의 인스턴스를 말한다.
- 운영체제로부터 시스템의 자원을 할당받은 작업의 단위이며, 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있는다.
- 각 프로세스는 별도의 주소 공간에서 실행되고 있으며 각 프로세스끼리는 자원의 공유를 하지 않는다.
- 또한 하나의 프로세스가 다른 프로세스이 자원에 접근하려면 프로세스간의 통신이 필요하면 메일 슬롯, 파이프, 소켓, 시그널, 공유 메모리등의 수단을 이용해야 한다.
할당받는 시스템의 자원 ?
- Code, Data, Stack, Heap 구조로 되어 있는 독립된 메모리 영역
- 주소 공간
- CPU 시간
3. 스레드(Thread)란?
- 스레드란 프로세스 내에서 실행되는 흐름의 단위로 프로세스 하나에 자원을 공유하면서 일련의 과정을 여러 개의 동시에 실행시킬 수 있는 것을 말한다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당 받고 Code, Data, Heap 영역을 공유한다.
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유하며 다른 프로세스라면 프로세스의 메모리에 접근할 수 없다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 변경된 결과를 직접 반영하여 볼 수 있다.
4. 자바(JAVA)에서 스레드(Thread) ?
- 자바에서 스레드는 일반 스레드와 거의 차이가 없고 JVM이 운영체제의 역할을 대신 수행한다.
- 자바에서 프로세스가 존재하지 않고 스레드만 있으며 자바 스레드는 JVM에 의해 스케줄링되는 실행 단위 코드 블록이다. 따라서 자바에서의 스레드 스케줄링은 JVM에 의해 이루어진다.
- 따라서 개발자는 자바 스레드로 작동시킬 스레드 코드를 작성하면 스레드 코드가 생명을 가지고 실행 시작을 JVM에 요청한다.
JVM의 스레드 관리 예시
스레드의 존재 갯수
스레드로 실행시키는 프로그램 코드의 메모리 위치
스레드 상태 관리
스레드 우선순위 관리
5. 멀티 프로세스와 멀티 스레드의 차이
1) 멀티 프로세스(Multi-Process)
- 멀티 프로세스란 하나의 응용 프로그램을 여러 개의 프로세스로 구성해 각 프로세스가 하나의 작업을 처리하도록 동작시키는 것이다.
- 멀티 프로세스는 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향을 미치지 않으면 구현이 간단한 장점이 있다.
- 또한 각 프로세스들이 독립적으로 동작(자원의 할당 또한 독립)이어서 안정적이다.
- 그러나 단점으로는 멀티스레드보다 많은 메모리 공간과 CPU 처리시간을 차지하며 작업량이 많을 수록 오버헤드가 크고 문맥교환(Context-Switching)에 많은 시간이 소요되어 성능 저하가 발생할 수 있다.
- 프로세스 간에 자원 공유를 하려면 프로세스 간의 통신을 통해 해야하며, 통신을 위해 IPC를 통해야한다.
IPC(Inter Process Communication)란 ?
프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법이며, 대표적인 종류에는 메시지 전달 (Message Passing)과 메모리 공유 (Shared Memory)가 있다.
2) 멀티 스레드(Multi-Thread)
- 멀티스레드란 하나의 응용 프로그램을 여러 개의 스레드로 구성해서 각 스레드가 하나의 작업을 처리하도록 하는 것이다.
- 멀티 스레드의 장점으로는 세스템 자원과 처리 비용이 감소하고 스레드는 Stack 영역만 처리하면 되기 때문에 문맥교환이 빠르다.
- 또한 스레드 간의 자원(Code, Data, Heap)을 공유해 통신의 부담이 적고 응답 시간이 빠르다.
- 그러나 멀티 스레드의 단점으로는 스레드가 개별로 유기적으로 움직이기 때문에 프로그램의 테스트와 디버깅이 어렵다. 그리고 스레드 간의 데이터 공유를 할 때 동기화 문제가 발생한다.
- 또한 하나의 스레드에서 오류가 발생하면 전체 프로세스로 영향을 미치며, 너무 많은 스레드를 사용할 때는 오버헤드가 발생할 수 있다.
6. 멀티 프로세스 대신 멀티 스레드를 사용하는 이유
- 멀티 스레드를 사용하면 자원의 효율성이 증대, 처리 비용 감소, 응답 시간 단축에 큰 메리트가 있다.
1) 자원의 효율성 증대
- 멀티 프로세스로 실행도는 작업을 멀티 스레드로 실행하면 프로세스를 생성해 자원을 할당하는 시스템 콜이 줄어들기 때문에 자원을 효율적으로 관리할 수 있다.
- 멀티 프로세스에서는 프로세스 간의 문맥교환(Context Switching)이 단순히 CPU 레지스터의 교체뿐만 아니라 RAM과 CPU 사이의 캐시 메모리에 대한 데이터 역시 초기화가 이루어지기 때문에 오버헤드가 크다.
- 하지만 스레드는 프로세스 내의 메모리 자원을 공유하기 때문에 독립적인 프로세스와 다르게 스레드에서는 데이터를 주고 받는 것이 간단하며 시스템 자원 소모가 크게 줄어든다.
2) 처리 비용 감소와 응답 시간 단축
- 스레드는 Stack영역을 제외한 모든 메모리의 자원을 공유하기 때문에 프로세스 간의 통신(IPC)보다는 스레드 간의 통신이 비용이 적기 떄문에 작업들간의 통신 부담이 줄어든다.
- 스레드는 문맥교환시에 Stack영역만 처리해서 프로세스 간의 전환속도 역시 멀티스레드보다 훨씬 빠르다.
멀티스레드에서는 전역 변수를 통해 자원을 공유하기 때문에
동기화 문제 해결이 필요하다 !
참고 : (https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html)
- 공부 목적으로 해당 블로그를 참고하여 포스팅 하였으며 문제 있을 시 바로 삭제하도록 하겠습니다.
'CS > 운영체제' 카테고리의 다른 글
스레드 안전(Thread-Safety)란? (0) | 2022.09.25 |
---|---|
동기-비동기와 블럭-논블록의 차이 (0) | 2022.09.18 |
컴퓨터 시스템의 동작 원리-3 (0) | 2021.10.28 |
컴퓨터 시스템의 동작 원리-2 (0) | 2021.10.28 |
컴퓨터 시스템의 동작 원리-1 (0) | 2021.10.28 |