[TIL] 프로세스와 스레드

최하온·2024년 3월 27일
0

TIL

목록 보기
54/71
post-thumbnail

Q. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.

프로세스 (Process)

: 운영 체제로부터 자원을 할당 받은 자원의 단위

  • 실행되어 작업 중인 프로그램
  • 메모리에 적재되고, 자원을 할당 받은 동적인 상태
  • 자신만의 고유 자원을 할당 받아 사용
  • 운영체제에게 stack, heap, data 등을 메모리 영역으로써 할당

스레드 (Thread)

:프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

  • 하나의 프로세스는 하나 이상의 스레드를 가짐
  • 동시에 진행되는 작업의 갈래
  • 하나의 프로세스는 하나의 스레드를 가짐
  • 프로세스 내에서 stack을 제외한 자원을 다른 스레드와 공유

프로세스의 자원 구조

alt text

  • Text : 작성한 프로그램 함수들의 코드가 기계어 형태로 저장 되어 있음.
  • Data : 코드가 실행되면서 전역 변수 등 각종 데이터가 저장 되어 있음.
  • Stack : 함수 호출과 함께 할당, 호출 완료 시 소멸. 함수가 종료되면 임시적인 자료를 저장하는 독립적인 공간.
    • 독립적인 함수 호출 => 독립적인 실행 흐름이 추가 됨!
  • Heap : 동적으로 할당되는 데이터들이 저장되는 공간. 동적으로 할당되고 해제 됨.

스레드의 자원 공유

  • 프로세스의 메모리 영역 중 Stack만 할당받아 복사, 나머지는 다른 스레드들과 공유

컨텍스트 스위칭

프로세스

: 한 프로세스에서 다른 프로세스로 전환할 때 발생

  • CPU는 하나의 프로세스만 실행 할 수 있으므로 (동시성) 여러 개의 프로세스를 번갈아가며 사용하기 위해 컨텍스트 스위칭 필요
  • A 프로세스가 동장 후 대기를 하면서 상태를 보관하면, 대기하고 있던 다음 순서의 B 프로세스가 동작 후 대기하면 A가 복구 되는 작업

=> 빈번히 발생 시 시스템에 부하를 주게 됨!

스레드

: 멀티 스레딩 환경에서 스레드 간의 실행을 전좐하는 기술.

  • 하나의 프로세스 내의 스레드들을 교환함.

Q. 멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.

🚨멀티 프로세스 vs 멀티 프로세서

  • 프로세스(process)는 하나의 프로그램에서 여러 개의 프로세스를 실행.
  • 프로세서(processer)는 여러개의 CPU 코어가 하나의 시스템에서 동시에 실행 되는 것.

https://miro.medium.com/v2/resize:fit:1400/1*hZ3guTdmDMXevFiT5Z3VrA.png

멀티 프로세스

: 여러개의 프로세스가 작업을 동시에 처리하는 것. (병렬처리)

  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용

ex) 인터넷 새 창, PM2

장점

  1. 안정성
  • 독립적인 공간을 가지므로 하나의 프로세스가 죽어도 다른 프로세스에는 영향을 주지 않는다.
  1. 새로운 기능이나 모듈 추가, 수정 시에 다른 프로세스에 영향을 주지 않음. => 규모 확장 용이

단점

  1. 컨텍스트 스위칭 과정에서 성능 저하가 올 수 있음

-> 프로세스 수를 적정하게 유지

-> CPU 캐시 적절하게 활용하기

  1. 자원 공유 비효율성
  • 독립적인 공간을 가지므로 메모리 공간울 비효율적으로 사용 => 메모리 사용량 증가

멀티 스레드

: 하나의 프로세스 안에 여러개의 스레드가 존재
=> 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리 가능.

장점

  1. 프로세스에 비해 가벼움
  • Stack,Data를 제외한 메모리 공간을 공유하기 때문.
  1. 자원의 효율성
  • 공유 메모리에 대해 자원 공유가 가능.

단점

  1. 안정성
  • 하나의 스레드에 이상이 생기면 다른 스레드들도 영향을 받는다.
  1. 동기화로 인한 성능 저하
  • 공유 자원이 동기화 문제가 발생할 수 있다. => 동기화 작업 필요
  • 동기화 작업
    • 자원에 대한 접근을 순차적으로 통제 => 병목화 현상이 일어날 수 있음.
    • =>임계영역, 뮤텍스, 세마포어 방식을 적절히 활용해야함.
  1. 교착상태
  • 서로가 점유한 자원을 기다리는 상황.

🤔Realization


  • 왜 싱글이 멀티처럼 돌아가는지 (노드 엔진에 관련하여)
  • 노드의 라이브러리(uvlib)가 어떻게 동작하는지

0개의 댓글