Thinking Out Loud

[IT Infra 기초] 프로세스와 스레드 본문

IT Infra

[IT Infra 기초] 프로세스와 스레드

주롱주롱 2021. 10. 12. 04:30

# 프로세스 · 스레드

≒ 프로그램 시작 시 뜨는 창들

 

 # 프로그램 시작 시 발생하는 일
 - 프로그램이 서버 내부의 디스크 상에 설치됨
 - 시작 의뢰가 있으면 커널이 프로세스를 작성. 또한, 요청 분량만큼만 메모리 공간 할당
 - OS 상에서 프로세스가 시작되어 사용자 요청을 받을 수 있게 됨

- 프로그램 실행 파일 자체 (X)

- OS 상에서 실행되어 어느 정도 독립성을 가지고 동작하는 것

- 프로세스 · 스레드가 시작되는 것 ≒ 사람이 숨을 쉬기 시작하면서 활동하는 것

- 프로세스 · 스레드가 활동하려면 메모리 공간이 필요

   → 프로세스 시작 시 커널에 의해 메모리 상에 공간이 확보

      프로세스 · 스레드가 자신을 위해서 소유하는 공간(개인 공간)

      다양한 처리를 하면서 데이터를 주고 받기 위해 이 공간을 사용

 

# 프로세스 vs 스레드

- 목적은 같지만, 구조가 다름

- 하나의 프로세스가 동작하고 있으면, 내부에서는 메모리 공간을 점유하는 스레드 하나가 동작하고 있다.

- 어떤 것을 이용할지는 애플리케이션 개발자가 결정

 

  프로세스 스레드
특징 1) 각각 독립된 메모리 공간 차지
   → 생성 시 스레드에 비해 CPU 부하↑
   ⇒ 멀티프로세스 애플리케이션에서는 프로세스 생성
       부담을 낮추기 위해 미리 프로세스를 시작시켜둠
       (ex. 연결 풀링(Pooling))
2) 전용 메모리 공간을 이용해서 동작
3) 내부에서 수많은 스레드가 동작하고 있음
1) 하나의 메모리 공간을 공유
   → 스레드 시작 시에 신규 메모리 공간은 필요 X.
       but, 다른 스레드에 이상 발생 시 영향 받음
2) 다른 스레드와 메모리 공간을 공유하는 운명 공동체
장점 개별 처리 독립성이 높다 생성 시 CPU 부하가 낮다
단점 생성 시 CPU 부하가 높다
→ CPU 부하를 줄이기 위해 미리 프로세스를 시작시킴
    (pooling)

메모리 공간을 공유
의도하지 않는 데이터 읽기/쓰기 발생 가능

# 프로세스 → 메모리 공간 공유 불가? ( X : 메모리 공간 공유 가능 )

- 독자(전용) 메모리 영역 / 공유 메모리 영역 용도별로 나누어 사용

   - 공유 메모리 영역 : 프로세스 간 공유하고픈 데이터 (ex. 캐시로 저장하고 있는 데이터)

   - 독자(전용) 메모리 영역 : 프로세스가 단독으로 이용하는 데이터 (ex. 자신이 계산한 결과)

 

ex) 오라클 DB - '공유 메모리 공간'

     - 각 프로세스별 메모리 공간(PGA)과 프로세스 전체가 공유하는 메모리 공간(SGA)이 나누어져 있음

     - 공유 메모리(SGA) : 디스크 상의 데이터 캐시나 실행 완료된 SQL 캐시, 데이블, 인덱스 등이 저장됨

     - 프로세스별 메모리(PGA) : 해당 프로세스 SQL이 이용하는 소트 영역이나 테이블 결합에 사용하는 메모리 영역이

       저장되어 있음. 이 영역은 다른 프로세스가 접근 불가. 이 메모리가 부족하면 공유 메모리를 아무리 크게 잡아도

       효과 X 

 


참고 : 야마자키 야스시 외 3, 「그림으로 공부하는 IT 인프라 구조」, 제이펍

'IT Infra' 카테고리의 다른 글

[IT Infra 기초] 웹 데이터 흐름  (0) 2021.10.12
[IT Infra 기초] OS 커널  (0) 2021.10.12
[IT Infra 기초] 버스 (Bus)  (0) 2021.10.12
[IT Infra 기초] I/O 장치  (0) 2021.10.12
[IT Infra 기초] CPU와 메모리  (0) 2021.10.08