Process & Thread 란?

박병관·2022년 2월 2일
0

우아한Tech

목록 보기
4/17
post-thumbnail

순서
1. Process와 Thread를 알기 전(feat.용어정리)
2. 프로그램과 프로세스(Process)
3. 프로세스와 스레드(thread)
4. Multi-process와 Multi-thread
5. Multi-core

유튜브 [10분 테코톡] 🌷 코다의 Process vs Thread 의 내용

Process와 Thread비교는 면접 단골 질문이라고 한다
영상에서는 질문에 어떻게 대답할지에 대한 생각으로 내용이 시작된다
(비슷한 뜻의 단어가 많이 나와서 단어를 혼용하지 않는 것에 집중했다고 한다)

Process와 Thread를 알기 전(feat. 용어정리)

1. 실행 단위

cpu core에서 실행하는 하나의 단위, 프로세스와 스레드를 포괄하는 개념

2. 프로세스

하나의 스레드만 가지고 있는 단일 스레드 프로세스

3. 동시성

한 순간 여러가지 일이 아니라, 짧은 전환으로 여러가지 일들을 동시에 처리하는 것처럼 보이는 것

프로그램과 프로세스(Process)

영상에서는 피자라는 키워드로
피자 레시피 = 프로그램
피자 = 프로세스
라 설명하고 있다

이처럼 프로그램 자체는 실행시키기 전에는 코드가 구현되어 있는 파일일 뿐이다

종이레시피가 피자가 되는 것 처럼 프로그램이 실행이 되어 사용할 수 있는 무언가가 되는게 프로세스이다

프로그램이 프로세스가 되면 어떤일이 일어날까

2가지 변화가 생긴다고 할 수 있다

로세스가 실행되는데 필요한 재료들이 메모리에 올라가야 하고, 메모리는 아래와 같은 모습이다

위는 메모리의 모습이다
Code = 실행 명령을 포함하는 코드들
Data = Static 변수 혹은 Global 변수
Heap = 동적 메모리 영역
Stack = 지역변수, 매개변수, 반환 값 등 일시적 데이터

  1. 위와같은 것들이 메모리 공간을 확보한다

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

pointer = 프로세스 상태 중 준비, 대기 상태를 구현
Process State = 현제 프로세스의 상태
PID = 고유번호
Program Counter = 다음 명령어를 가르킨다
등등

Process와 Thread

Process

Process는 위의 프로그램과 프로세스에서 알아봤다

우리는 컴퓨터를 사용할 때 여러개의 프로세스를 사용하려고 한다(코딩을 하면서 음악을 듣는다거나 등등)

이런 다수의 프로세스를 동시에 실행시키기 위해 다수의 프로세스를 시분할로, 짧은 텀을 반복하면서 전환하며 실행시킨다

즉 위와같이 다수의 프로세스들을 CPU에 돌아가면서 CPU에 적재, 준비상태로 돌아가는 컨텍스트 스위칭을 한다
이런 컨텍스트 스위칭은 피곤한 작업이 될 수 있다

Thread

그래서 등장한게 바로 경량화된 프로세스 버전인 스레드이다

프로세스가 경령화된 프로세스 버전인 이유는 하나의 프로세스안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문이다

스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용한다
즉 각 스레드는 각각의 스택만을 사용하는 것이다

이처럼 공유하는 자원이 있기 때문에 컨텍스트 스위칭이 일어날 때 캐싱 적중률이 올라간다
쉽게 말해 CPU에 프로세스를 모조리 다 빼고, 넣을 필요가 없게 됐다는 말이다

그러면 Multi-process 와 Multi-thread는 뭘까?

멀티프로세스와 멀티스레드 두 가지 개념이 모두 처리방식의 일종이다

두 개념 모두 어플리케이션에 대한 다른 처리방식에 대해 이야기 하는 것이라 생각하면 된다

Multi-process

예를 들어 여러 사용자가 로그인을 요청하는 상황이 있다
한 프로세스는 매번 하나의 로그인만 처리 할 수 있기 때문에 동시에 처리할 수 없다

그래서 부모 프로세스가 fork를 해서 자식 여러 개의 자식 프로세스를 만들어 일을 처리하도록 한다
이 때 자식프로세스는 부모와 별개의 메모리 영역을 확보하게 된다

Multi-thread

Multi-thread는 위의 Multi-process와 다르게 한 프로세스 내에서 구분지어진 실행 단위라고 할 수 있다

실행단위는 프로세스일 수도 있고, 스레드일 수도 있다

그래서 만약 프로세스가 다수의 스레드로 구분되어 있지 않으면 단일 스레드 하나로 프로세스가 실행된다
이 때 실행단위는 프로세스 그 자체가 된다
즉 해당 프로세스의 하나밖에 없는 쓰레드가 실행 단위가 되는 것이다

프로세스에서 여러 스레드로 실행단위가 나누어지면 멀티 스레드가 된다

Multi-process와 Multi-thread의 특징

Multi-process

  • 각 프로세스는 독립적
  • IPC를 사용한 통신
  • 자원 소모적, 개별 메로리 차지
  • Context Switching 비용이 큼
  • 동기화 작업이 필요하지 않음

Multi-thread

  • Thread끼리 긴밀하게 연결되어 있음
  • 공유된 자원으로 통신 비용 절감
  • 공유된 자원으로 메모리가 효율적임
  • Context Switching 비용이 적음
  • 공유 자원 관리를 해야함

이렇게 보면 Multi-thread가 좋아보이는데 왜 Multi-process를 이용할까

Multi-thread를 사용하는 예로는 인터넷 익스플로어가 있다

멀티 스레드를 이용해서 여러 개의 탭에 중요한 정보들을 띄어놓고 작업을 하다가 오류가 뜨면 전체 프로세스의 영향이 간다

Multi-process를 사용하는 예로는 크롬이 있다

크롬은 조금 비효율적일 수 있지만 멀티프로세서를 이용해서 멀티탭 간 영향을 덜받는다

그러면 Multi-core는 무었일까

Multi-core는 비슷한 느낌이 들지만 조금 다른 관점에서 봐야한다

위의 멀티프로세스와 멀티쓰레드는 '처리방식'의 일종이라 소프트웨어분야에 가깝고 멀티코어는 하드웨어분야에 가깝다

위에서 싱글코어를 가진 cpu가 동시에 여러 가지 일을 처리하기 위해 빠른 텀으로 전환되며 실행되는 컨텍스트 스위칭이 일어나고, 동시에 일이 처리되는 것 처럼 보이게 되는 것이 동시성이다

멀티코어는 물리적으로 여러 코어를 사용해 다수의 실행 단위를 한 순간에 동시에 처리할 수 있게 해준 것이고 이러한 것이 병렬처리이다

정리하며 더 궁금한 점, 느낀점 🙃

  • 영상 마지막에 더 자세한 스레드의 종류(사용자/커널)로 나뉘어 지고 연관관계에 대한 간단한 설명을 해주시는데 이 개념이 궁금하다

  • 또 영상 마지막에 리눅스의 쓰레드와 관련해서 PID, TGID에 대한 설명을 스레드의 종류와 관련하여 해주시는데 학교 역량강화(Docker)시간에 리눅스를 사용하며 PID... 본 경험이 떠올라서 이 PID, TGID에 대한 내용이 궁금하다

  • Multi-process에서 부모프로세스를 fork하여 자식프로세
    스를 만들어 일을 처리한다고 했는데 이 fork하는 과정이 궁금하다

  • 학교에서 컨텍스트 스위칭 방법들을 배웠던 것 같은데 방법들도 정리해놓고 싶다

  • 어떤velog글과 댓글을 보다가 Process와 Thread에 대한 내용을 보고 반성해서 이 Process와 Thread에 대한 내용을 10분 테코톡에 찾아보게 되었다. 학교(컴퓨터일반, 컴퓨터구조)에서 배운 내용이라 어느정도 알고 있다고 생각했는데 개념적인 부분(동시성 등)이 더 있었던 것 같고 그냥 배웠을 때와 내가 찾아서 배우는 내용은 내자세가 달라지다 보니 더 이해하기 쉽다는 걸 느꼈다.

profile
괴물신인

0개의 댓글