Process, Thread

supway·2022년 9월 26일
0

Tech

목록 보기
4/7

Program, Process

program (명령어, 코드 및 정적인 데이터의 묶음) -> processor(실행) -> process(실행 중인 프로그램)
=> 프로세스가 필요로 하는 재료들이 메모리에 올라가야함

Process의 영역

  • Text 영역 => 프로그램 코드
  • 데이터 영역 => 전역 변수 (static)
  • 힙 영역 => 동적으로 할당된 메모리
  • 스택 영역 => 매개변수, 지역변수 등 임시적인 자료
  • PCB (Process Control block)-> 프로세스 정보

한 프로세스가 cpu를 점유하고 있으면 다른 프로세스는 그 cpu(자원)을 할당 받을 수 없음 => 시분할로 동시성을 가짐

동시성 -> 동시에 실행 되는 것처럼 보이기 위해 실행 단위는 시분할로 cpu를 점유하며 context switching 을 함
(컨테스트 스위칭 => 두 프로세스가 cpu를 번갈아 가면서 할당)

Thread

Thread => 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위 (경량화된 프로세스 버전)
=> 이 때 실행 단위는 프로세스(단일 쓰레드를 가지는 프로세스의 경우) 일수도, 쓰레드 일수도 있음
=> 코드 영역, 데이터 영역, 힙 영역을 공통된 자원으로 사용, , 스택 영역은 별도의 영역을 가짐
=> 공유되는 자원이 있기 때문에 캐싱 적중률 올라감 (자원을 효율적으로 사용 가능)

한 애플리케이션에 대한 작업을 동시에 하기 위한 2가지 처리방식
1. 멀티 프로세스
2. 멀티 쓰레드

Multi Process, Multi Thread

멀티 프로세서는 독립적인 메모리를 가지고 있음

Multi Process란?

=> 부모 프로세스가 fork를 통해 자식 프로세스를 여러개 만들어서 일을 처리하는 것

Multi Thread란?

=> 하나의 프로세스 안에 여러 개의 Thread가 존재
멀티 쓰레드는 자원을 공유

차이점
Multi Procees의 경우

  • 각 프로세스가 독립적이기 때문에 IPC를 사용해 통신을 해야함
  • 자원이 소모적이고 개별 메모리를 차지함 (자식 프로세스가 문제가 생겨도 다른 프로세스는 영향을 덜 받음)
  • Context Switching 비용이 큼
  • 동기화 작업이 불필요

Multi Thread의 경우

  • 쓰레드끼리 긴밀하게 연결 되어 있어 공유 자원을 사용 가능
  • 공유된 자원을 사용함으로써 통신 비용을 절감하고 메모리가 효율적임
  • Context Switchin 비용이 적음
  • 공유 자원을 관리해야함 -> 충돌에 주의 (Thread-safe)
    (한 쓰레드에 영향이 생기면 다른 쓰레드에도 영향이 감)

Multi Core

하드웨어 측면에서 물리적인 코어 갯수를 늘려서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세스가 존재


우아한Tech의 테코톡(코다,쿼리치,김고래님의 Spring vs Spring boot)를 참조하였습니다.

profile
개발잘하고싶은사람

0개의 댓글