CS / / 2024. 10. 24. 17:14

프로세스 & 스레드

프로그램 (Program)

  • 컴퓨터에서 실행할 수 있는 파일을 통칭 → 컴퓨터는 프로그램이 있어야 일을 함
  • 코드 집합

 

프로세스 (Process)

  • 프로그램이 활성화된 상태
  • 컴퓨터에서 작업중인 프로그램
  • 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있음
    • 프로그램 실행 → 메모리에 컴퓨터 파일 올라감 → 운영체제로부터 시스템 자원(CPU) 할당받아 프로그램 코드 실행

 

스레드(Thread)

  • 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위
  • 한 순간에 하나의 작업밖에 하지 못함

 

프로그램  프로세스
어떤 작업을 하기 위해 실행할 수 있는 파일 실행되어 작업중인 컴퓨터 프로그램
파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
코드 덩어리 코드 덩어리를 실행한 것

 

프로세스 (Process)  스레드 (Thread)
운영체제로부터 자원을 할당받은 작업의 단위 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

 

멀티 프로세스 vs 멀티 스레드

한 어플리케이션에 대한 처리 방식 + 동시에 여러 일 처리

 

멀티 프로세스(Multi Process)

  • 운영체제에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술
  • 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함으로서 다중 프로세스 구조
    • 부모 프로세스와 자식 프로세스는 독립적으로 실행되며, 독립적인 메모리 공간을 가지고 있어 서로 다른 작업 수행
    • EX) 웹 브라우저의 상단 탭 → 같은 브라우저 프로그램 실행이지만, 각기 다른 사이트 실행

 

※ 멀티 프로세서(Multi Processer) : 여러 개의 CPU 코어가 하나의 시스템에서 동시에 실행되는 것

 

[장점]

1. 프로그램 안전성

: 각 프로세스가 독립적인 메모리 공간을 가지므로, 한 프로세스가 비정상적으로 종료되어도 다른 프로세스에 영향 X

→ 프로그램 전체의 안정성 확보 가능

 

2. 프로그램 병렬성

: 다중 CPU 시스템에서 각 프로세스를 병렬적으로 실행하여 성능 향상

(멀티 프로세스와 멀티 스레드 둘의 장점 → 멀티 스레드로 구성하는 것이 더 효율적)

 

3. 시스템 확장성

: 각 프로세스가 독립적이므로, 새로운 기능이나 모듈을 추가하거나 수정할 때 다른 프로세스에 영향 X → 쉽게 규모 확장 가능

 

[단점]

1. Context Switching Overhead 

: 빈번한 context switching 작업으로 인해 비용 오버헤드 발생

 

[Context switching]

  • Linix 커널의 Process Scheduler: 한정된 core에 여러 코드가 돌도록 전환(context switching)
  • context switching은 생산성도 없고 쓰잘데기 없음 → 양이나 횟수를 최소화 하는게 좋음!
    • 프로세스를 context switching하면, CPU는 다음 프로세스의 정보를 불러오기 위해 메모리를 검색하고, CPU 캐시 메모리를 초기화하며, 프로세스 상태를 저장하고, 불러올 데이터를 준비해야 함 → 비용 多
    • 스레드는 프로세스 스위칭보다 가벼워 빠르고 좋음

 

2. 자원 공유 비효율성

: 멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지므로, 결과적으로 메모리 사용량 증가

(address space 공유 X)

→ 프로세스 간의 통신은 주로 IPC(Inter-Process Communication)를 통해 이루어짐

shared memory, pipe, socket 등이 포함됨

 

※ 프로세스 주소 공간(Process Address Space) : 프로그램이 실행되면 OS는 실행 파일의 명령들을 읽어 프로세스를 생성하고 메모리를 할당하게 되는데, 이를 프로세스 주소 공간이라고 함.

 

[폰 노이만 아키텍쳐]

  • 중앙처리장치(CPU), 메모리, 프로그램 세 가지 요소로 구성
  • CPU와 메모리는 서로 분리되어 있고 둘을 연결하는 버스를 통해 명령어 읽기, 데이터의 읽고 쓰기가 가능
  • 메모리에 올라온 data만 쓸 수 있음 → data 공유해야 함
    • cf) 양자 컴퓨터는 전통적인 폰노이만 구조와 다른 방식으로 작동(큐비트 사용)

 

멀티 스레드(Multi Thread)

  • 하나의 프로세스 안에 여러 개의 스레드가 있는 것
  • 하나의 프로그램에서 두가지 이상의 동작 동시 처리
    • EX) 웹 서버 → 사용자가 서버 데이터베이스에 자료를 요청하는 동안 브라우저의 다른 기능을 이용할 수 있음

※ 웹 브라우저 예시

  • 멀티 프로세스: 웹 브라우저에서의 여러 탭이나 여러 창
  • 멀티 스레드: 웹 브라우저의 단일 탭 또는 창 내에서 브라우저 이벤트 루프, 네트워크 처리, I/O 및 기타 작업을 관리하고 처리

 

[장점]

1. 프로세스보다 가벼움

: 스레드는 프로세스 내에서 생성되기 때문에 스레드의 실행 환경을 설정하는 작업이 매우 간단하여 생성 및 종료가 빠름

+) 프로세스와 달리 자원을 서로 공유하기 때문에 데이터 용량 작음

 

2. 자원의 효율성

: address space 공유 → 프로세스 간 통신(IPC)를 사용하지 않고도 데이터 공유 가능

 

3. Context Switching 비용 감소

: 프로세스의 context switching보다 오버헤드가 훨씬 낮아 비용 낮음

→ 스레드의 context switching 비용은 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만을 교체하면 되므로

4. 응답 시간 단축

: 스레드 간의 통신이나 자원 공유 용이 + 프로세스보다 가벼워 컨텍스트 스위칭 오버헤드 작음

→ 멀티 프로세스보다 응답 시간이 빠르다.

 

[단점]

1. 안정성 문제

: 하나의 스레드에서 문제가 발생하면 다른 스레드들도 영향을 받아 전체 프로그램 종료

cf) 멀티 프로세스: 각 프로세스가 독립적으로 동작하므로 하나의 프로세스에 문제가 발생해도 다른 프로세스들은 영향을 받지 않기 때문에 프로그램이 죽지 않고 계속 동작 가능

2. 동기화로 인한 성능 저하

: 여러 개의 스레드가 공유 자원에 동시에 접근할 수 있기 때문에, 동기화 문제 발생 가능

→ 여러 스레드들이 자원에 대한 접근을 순차적으로 통제하는 동기화 작업 필요

(여러 스레드 접근을 제한하는 것이므로 병목 현상이 일어나 성능 저하될 수 있음)

 

3. 데드락(교착 상태)

: 다수의 프로세스나 스레드가 서로 자원을 점유하고, 다른 프로세스나 스레드가 점유한 자원을 기다리는 상황에서 발생하는 교착 상태 → 무한 루

 

멀티 스레드 X 멀티 프로세스 O인 이유

  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만 기본적으로 멀티 스레딩을 기본으로 하고 있음
  • 그러나 증권사 입장에서 FEP가 죽으면 큰일남(소송 당하고 회사 망함)
  • 멀티 스레드: 같이 죽음 / 멀티 프로세스: 하나가 죽어도 다른 것에 영향 X

'CS' 카테고리의 다른 글

엔디안이란? (빅엔디안 / 리틀엔디안)  (0) 2024.10.24
[c언어] TCP/IP Socket 통신 흐름  (0) 2024.10.07
Transport Layer - TCP  (0) 2024.10.07
Linux Kernel & Process Management  (1) 2024.10.07
Linux Kernel & Program Execution  (0) 2024.10.07
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유