이전 블로그에서 글 옮김
프로세스는 운영체제 위에서 연속적으로 실행되고 있는 프로그램이다. 지금 내가 글을 쓰고 있는 웹스톰도 하나의 프로세스
이 글을 읽을 수 있는 크롬도 하나의 프로세스 이다. 현재 실행중인 프로그램 모두 프로세스를 가지고 있다.
각 프로세스는 메모리 위에서 독립적으로 실행된다. 프로세스는 격리된 실행 개체이며 데이터 및 정보를 공유하지 않는다.
따라서 어떤 프로세스에서 문제가 발생한다면 해당 프로세스만 죽게된다.
프로세스는 통신을 위해 IPC(Inter-Process Communication) 메커니즘을 사용한다.
프로세스에는 프로그램을 위해 작성된 Code
가 있고, 그 안에 함수들이 어떤 순서로 실행되어야 하는지 함수가 끝나면 어디로 돌아가야하는지 에 대한 정보가 있는 Stack
이 있다.
그리고 우리가 오브젝트를 생성하거나 데이터를 만들 때 데이터들이 저장되는 공간인 Heap
이 있다. Heap
에는 동적으로 할당된 변수가 저장되고, Data
에는 전역 변수나 스태틱 변수들이 할당된다.
쓰레드는 프로세스의 일부인 실행 단위이다. 프로세스는 동시에 실행되는 여러 개의 쓰레드를 가질 수 있다. 쓰레드는 각각 해야하는 업무를 배정 받는다.
이 쓰레드는 자기들이 수행해야하는 함수의 호출을 기억해야 하기 때문에 쓰레드마다 스택이 할당되어 있다.
하지만 프로세스 안에서 동작하는 쓰레드들은 결국 한 프로그램을 위해 일하기 때문에 프로세스에 지정된 코드와 데이터, 힙들에 접근해서 공통적으로 업데이트가 가능하다.
쉽게 말하면 크롬에서 유튜브를 통해 음악을 들으면서 블로그를 읽을 수 있는 것은 음악을 재생하는 쓰레드 하나, 블로그 글을 읽는 쓰레드 하나가 존재하기 때문이다라고 할 수 있다.
프로세스 | 쓰레드 | |
---|---|---|
정의 | 프로세스는 프로그램이 실행 중임을 의미함 | 쓰레드는 프로세스의 한 부분을 의미함 |
무게 | 프로세스는 무거움 | 쓰레드는 가벼움 |
종료까지 걸리는 시간 | 프로세스는 더 많은 시간이 걸림 | 쓰레드는 비교적 덜 걸림 |
생성 시간 | 프로세스는 더 많은 시간이 걸림 | 쓰레드는 비교적 덜 걸림 |
통신 | 프로세스간의 통신은 쓰레드보다 더 많은 시간이 걸림 | 쓰레드간의 통신은 프로세스에 비해 덜 걸림 |
리소스 | 프로세스가 더 많은 리소스를 소비함 | 쓰레드는 더 적은 리소스를 소비함 |
메모리 공유 | 프로세스는 격리되어 있음 | 쓰레드는 서로 메모리를 공유함 |
데이터 공유 | 프로세스는 공유하지 않음 | 쓰레드는 서로 데이터를 공유함 |