10분 테코톡 Process vs Thread 정리

전민진·2022년 9월 2일
0

** 키워드 정리

  • 실행 단위 : CPU core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
  • 프로세스 : 하나의 스레드만 가지고 있는 단일 스레드 프로세스
  • 동시성 : 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것

프로그램과 프로세스

프로그램이 프로세스가 되면서 총 2가지 일이 일어나야 함

  1. 프로세스가 필요로 하는 데이터들이 메모리에 올라가야함

    • Code : 실행 명령을 포함하는 코드들
    • Data : static변수 또는 global변수
    • Heap : 동적 메모리 영역
    • Stack : 지역변수, 매개변수, 반환 값 등 일시적인 데이터
  2. 해당 프로세스에 대한 정보를 담고 있는 PCB(Process Control Block)도 올라가야 함

    • Pointer : 준비 상태나 대기 상태의 큐를 구현하기 위해 필요한 포인터
    • Process State : 현재 프로세스 상태 저장
    • Process Number : 프로세스 고유 번호
    • Program Count : 다음 명령어를 가리킴
    • Register
    • Memory limits
    • List of open files
      ...

Process & Thread

프로세스를 동시에 실행시키기 위해서 프로세스들을 번갈아가면서 실행 - 준비 상태를 반복
ex) 1번 실행 - 1번 대기열로 내림 - 2번 실행 - 2번 대기열로 내림..
==> 이를 경량화한 것이 Thread!
(하나의 프로세스 안에 다수의 쓰레드가 있으면 공유되는 자원이 있기 때문!)

쓰레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용(스택만 따로 가지고 있음)
=> 공유되는 자원이 있기 때문에 이전처럼 컨텍스트 스위칭이 일어날 때 캐시 적중률이 높아짐
ex) 회의실에서 노트북, 스피커, 리모콘으로 화면을 연결해서 발표를 한다고 할 때, 이전 팀이 노트북, 스피커, 리모콘을 다 두고 가면 금방 바로 발표를 진행할 수 있는 것 처럼!

Multi-process & Multi-thread

한 어플리케이션에 대한 두 가지 처리 방식

  • Multi-process

    • 다수의 사용자가 로그인하려고 할 때, 프로세스는 매번 하나의 로그인만 처리할 수 있으므로 부모 프로세스가 fork()해서 자식 프로세스를 여러개 만들어서 처리
    • 이 때, 자식 프로세스는 부모와 별개의 메모리 영역을 갖게 됨
    • 각 프로세스는 독립적
    • IPC를 사용한 통신
      : 각자 다른 회의실을 사용하는 두 팀이 서로 논의할 일이 생기면 회의실 밖으로 나와서 이야기를 해야하는 것처럼!
    • 자원 소모적, 개별 메모리 차지
    • Context switching 비용이 큼
    • 동기화 작업이 필요하지 않음
  • Multi-process

    • 프로세스 내에서 분리해서 여러 스레드로 나뉘어 실행단위가 나뉘어짐
    • vscode에서 디버깅하면서 모델도 돌리고, log도 보고.. 한 어플리케이션에 대해서 작업의 단위가 나뉘어질 경우! 이때 각각의 스레드가 나눠서 작업을 맡음
    • Thread끼리 긴밀하게 연결되어 있음
    • 공유된 자원으로 통신 비용 절감
    • 공유된 자원으로 메모리가 효율적
    • 공유 자원 관리 필요
  • Concurency : 하나의 코어에서 하나 이상의 프로세스 혹은 쓰레드가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것

  • Multi-core

    • 물리적으로 여러 코어를 사용해서 하나 이상의 프로세스 혹은 쓰레드가 한꺼번에 진행되는 것

요약

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

0개의 댓글