프로세스와 스레드
프로세스 란?
스레드 란?
멀티 프로세스, 멀티 스레드
프로세스 란?
실행중인 프로그램의 인스턴스를 프로세스라 한다.
프로그램과 프로세스의 차이
- 프로그램은 저장소에서 동작을 기다리는 코드 뭉치
- 프로그램은 생명이 없다. 프로그램이 생명을 부여받은게 프로세스
프로세스의 구조
Code
함수, 제어문, 상수
Data
초기화된 전역 변수
Bss
초기화 안된 전역 변수
Heap
동적할당 개발자가 인위적으로 할당한 값
Stack
지역변수, 매개변수
프로세스의 특징
- Code, Data, Stack, Heap의 구조로 구현되어 있다.
- cpu는 한번에 하나의 프로세스만 구동할 수 있다. 하지만
Context Switching
을 통해 멀티프로세스가 가능하다. - 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
스레드 란?
프로세스가 할당받은 자원을 이용하는 실행의 단위 이다.
스레드의 특징
- 프로세스의 하위 집합
- 스레드는 프로세스에게
stack
을 할당 받고heap
은 공유한다. - 따라서
heap
영역의 있는 데이터를Thread1
이 변경하면Thread2
가 그 데이터를 이용하고 있으면Thread2
도 변화에 영향을 받는다. java
의 스레드는JVM
에 의해 스케줄이 관리된다.
멀티 프로세스
멀티 프로세스는
Context Switching
통해cpu
가 한번에 여러 동작을 하는것
- ex) 윈도우나 스마트폰에서 여러 프로그램이 동시에 동작하고 있는 것
- ex) 크롬은 멀티 프로세스 환경이다.
멀티 프로세스의 장점
여러개의 자식 프로세스가 동작중일 때 하나의 프로세스가 죽는다고 피해가 확산되지 않는다. 각각의 프로세스는 메모리를 공유 하지 않기 때문에 하나를 사용하는것 처럼 동작이 빠르다.
멀티 프로세스의 단점
Context Switching
과정에 캐쉬 메모리 초기화 와 같은 무거운 작업이 일어나기 때문에 오버해드가 발생할 수 있다.- 각 프로세스들이 무겁다
- 프로세스 사이 변수를 직접 공유할 수 없다.
멀티 스레드
멀티 스레드란 하나의 프로세스로 여러개의 스레드를 구성하고 동작시키는것
윈도우나 리눅스등 많은 운영체제가 멀티 스레드로 동작하고 있다.
- ex) 인터넷익스플로러 하나가 응답 없으면 다 꺼진다.
멀티 스레드의 장점
heap
영역과Code
영역을 공유하기 때문에 메모리를 효율적으로 사용할 수 있다.- 스레드 사이의 작업량이 작아
Context Switching
이 빠르다.
멀티 스레드의 단점
- 서로 데이터를 공유하기 때문에 충돌이 일어날 수 있다.
- 디버깅이 까다롭다.
- 설계가 어렵다.
- 하나의 스레드의 문제가 전체 스레드로 파생된다.
멀티 스레드, 멀티 프로세스를 구현할 땐 데드락(교착 상태) 상태를 고려하고 있어야 한다.
참고
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread