Process vs Thread
출처 : 우아한 Tech - [10분 테크톡] 코다의 Process vs Thread
keyword
- 실행단위 - CPU CORE 에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- (부연설명이 없는)프로세스 - 하나의 스레드만 가지고 있는 단일 스레드 프로세스
- 동시성 - 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
Process
process 는 program 이 실행된 것을 의미한다. [ Program - 요리 레시피, Process - 완성된 요리 ]
우리가 pc에서 다양한 앱을 동시에 사용한다고 생각하자. 카카오톡, 유튜브, 게임 등을 실행시켜 놓았을 때, 프로세스는 우리가 사용하기 위해 켜놓은(실행한) 카카오톡, 유튜브, 게임 등이 프로세스이다.
엄연히 말하면 프로세스들은 동시에 실행되는 것이 아니라, 각 프로세스가 메모리에 배치되고 실행되고 준비상태로 변하고 다른 프로세스가 메모리에 배치되고 실행되고 준비상태로 변하고 계속 스위칭 되는 것이다. 이를 context switching 이라고 한다. (싱글코어 기준)
이를 동시성이라고 하는데 하나의 코어에서 하나 이상의 프로세스(및 스레드)가 번갈아 가면서 진행되지만 동시에 진행되는 것처럼 느껴지는 것을 의미한다.
Thread
경량화된 프로세스라고 볼 수 있다. 하나의 프로세스 안에서 각 다른 작업을 진행하고자 할 때 thread 로 나뉜다.
한 프로세스 안에 스레드들은 code, data, heap 영역을 공통된 자원으로 사용, stack 영역만 따로 가지고 있음.
공유되는 자원 덕분에 context switching 이 일어날 때 캐싱 적중률이 상승함.(다 빼고 다시 넣을 필요가 없음)
Muti-process / Mutl-thread
두가지 개념 모두 한 어플리케이션에 대한 처리방식
1. Muti-process
- 각 process 는 독립적임 (각각 다른 code, data, heap, data)
- 독립적이기에 IPC 를 통해 통신함
- 자원소모적, 개별메모리 차지, context switching 비용이 큼(독립적이기 떄문)
- 동기화 작업 필요x
2. Mutl-thread
- 각 thread 는 긴밀하게 연결되있음(같은 code, data, heap 공유, 각각 다른 stack)
- 통신비용절감, 메모리 효율적, context switching 비용이 적음 (자원이 공유되있기에)
- 동기화 작업필요(공유자원관리)
** Muti-thread 말고 Muti-process 를 사용하는 이유?
IE 와 Chrome 의 차이를 예를 들 수 있다.
IE 의 경우 Muti-thread 를 사용한다. 따라서 IE 의 각 탭들은 서로 긴밀하게 연결되있는데, 만약 하나의 탭에서 문제가 생기면 다른 전체의 탭들에게도 영향을 주기 때문에 오류발생시 IE 창 전체를 닫아야한다.
Chrome 의 경우 Muti-process 를 사용한다. 따라서 하나의 Chrome 탭에서 문제가 생기더라도, 그 탭에서 오류가 발생하면 그 탭만 닫아주면 되기 때문에 다른 탭에 영향을 줄 가능성이 적다.
Multi-Core
멀티 코어는 하드웨어 측면에서 실행 단위(프로세스, 스레드)를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것이다.
위에서 싱글코어 기준으로 여러 프로세스들이 동시에 진행되는 것이 아니라 빠른 속도로 전환되면서 동시에 진행하는것 처럼 보인다고 설명을 했었다.
멀티코어는 여러 프로세스들을 동시에 처리할 수 있도록 병렬처리를 지원한다. 각 코어에서 프로세스들을 받아 한번에 프로세스를 진행할 수 있게 한다.
싱글코어 | 멀티코어 |
[동시성] 하나의 코어에서 하나 이상의 프로세스(및 스레드)가 번갈아 가면서 진행되지만 동시에 진행되는 것처럼 느껴지는 것 |
[병렬처리] 둘 이상의 코어에서 각자 하나 이상의 프로세스를 처리하여 동시에 여러 프로세스들을 처리하는 것. |