취미가 좋다

[테코톡] Process vs Thread 본문

개발 기타/테크톡

[테코톡] Process vs Thread

benlee73 2021. 8. 25. 17:04

1. Multi-Process

프로세스 : 프로그램이 실행된 것

 

프로그램이 프로세스가 되면서 일어나는 일

1) 프로세스 동작에 필요한 정보들이 메모리에 올라간다.

2) 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭이 만들어진다.

 

다수의 프로세스를 동시에 실행시키기 위해, 짧은 텀을 반복하면서 전환해서 실행한다.

이를 context switching이라고 하고, 이 방식으로 Multi-process가 가능해진다.

2. Multi-thread

하지만 context switching은 cost가 많이 들고, 이를 절약하기 위한 또다른 방식이 Thread를 사용하는 방식이다.

 

스레드는 경량화된 프로세스라고 볼 수 있다.

 

하나의 프로세스 안에 여러 스레드가 있을 때, stack을 제외한 code, data, heap을 공통된 자원으로 사용한다.

공유되는 자원이 있기 때문에 context switching이 일어날 때, 캐싱 적중률이 올라간다. 모든 정보를 다 빼고 다시 넣을 필요가 없다. 즉, 여러 스레드를 동작시키는 것은 스레드보다 덜 부담이 된다.

 

한 어플리케이션에 대한 작업의 단위가 나눠질 때, 멀티 스레드를 사용하여 각 작업들을 담당하도록 한다.

 

3. Multi-process vs Multi-thread

두 개념은 한 어플리케이션에 대한 처리 방식의 일종이다.

 

한 어플리케이션이 여러 사용자의 로그인을 처리해야하는 상황을 예로 들어보자.

한 프로세스는 하나의 로그인만 처리할 수 있기 때문에, 부모 프로세스가 fork( )하여 자식 프로세스를 생성하여 작업을 처리한다고 한다. 이 때, 자식 프로세스는 부모와 별개의 메모리 영역을 가진다.

 

반면 스레드는 한 프로세스 내에서 구분지어진 실행 단위로, 코드/데이터/힙의 메모리 영역을 공유한다.

(위의 경우에는 한 프로세스, 다시 말하면 프로세스의 하나뿐인 스레드가 실행 단위가 된다.)

 

멀티 스레드의 큰 단점 중 하나는 하나의 스레드에 문제가 생기면 다른 스레드에도 영향을 미친다는 의미이다.

아래의 internet explorer는 멀티 스레드 방식으로, 하나의 탭에 문제가 생기면 다른 탭에 영향을 주기도 했다.

반면 chrome은 멀티 프로세스 방식으로 비효율적인 부분도 있지만, 멀티 탭간의 영향이 적다.

 

3. Multi-core

이전의 방식들은 소프트웨어 측면에 가깝다면, Multi-core는 하드웨어 측면에 가깝다.

 

물리적으로 여러 코어를 사용해서, 다수의 실행 단위를 동시에 처리한다.

 

4. 리눅스에서 Process와 Thread

리눅스에서 스레드는 사용자 스레드와 커널 스레드로 나뉜다.

사용자 레벨에서 생성된 스레드와 커널 스레드는 1:1 관계를 갖는다. 즉, 하나의 사용자 스레드당 커널 스레드 하나가 매칭된다.

그래서 리눅스 커널에서는 각각의 스레드가 하나의 프로세스로 본다.

그렇지만 이 프로세스는 메모리를 공유하기 때문에, light weight process라고 부른다.

 

각각의 프로세스는 pid를 가지고 있고, 그 속의 스레드는 역시나 같은 pid를 가진다.

하지만 TGID(스레드 그룹 아이디), TID(스레드 아이디)는 다르게 가질 수 있다.

 

사용자 레벨에서는 TGID가 PID로 보여지고, 커널 레벨에서는 TIG가 PID로 보여진다.

그래서 커널 입장에서는 각각 다른 프로세스로 바라볼 수 있는 것이다.

 

요약
  1. 프로세스는 프로그램이 실행된 것이다.
  2. 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.
  3. 한 어플리케이션에 대한 작업을 동시에 하기 위해서는, 2가지 처리 방식(멀티 프로세스, 멀티 스레드)이 있다.
  4. 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하여 context switching을 한다.
  5. 멀티 프로세스는 독립적인 메모리를 가지고 있지만, 멀티 스레드는 자원을 공유한다. 이들은 각각의 장단점이 있다.
  6. 멀티 코어는 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것이다.

 

 

 

 

 


https://youtu.be/1grtWKqTn50

 

 

 

 

 

 

 

 

 

 

 

 

 

'개발 기타 > 테크톡' 카테고리의 다른 글

JVM의 Garbage Collector  (0) 2022.02.15
Forward Proxy, Reverse Proxy, Load Balancer  (0) 2021.10.04
MySQL & Oracle & MariaDB & PostgreSQL 비교  (0) 2021.09.28
SQL 인젝션  (0) 2021.09.24
Comments