CS 지식/운영체제

프로세스(Process) vs 스레드(Thread)

naksnaks 2023. 2. 16.
반응형

프로세스 vs 스레드

프로세스란?

운영체제로부터 자원을 할당받는 작업의 단위입니다.
어플리케이션 하나가 프로세스입니다.

프로세
참조 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

프로세스의 특징

  • 프로세스는 독립된 메모리 영역을 할당받습니다.
  • 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야 합니다. ( ex) 파이프, 파일, 소켓 이용한 통신(IPC))

스레드란?

할당 받은 자원을 이용하는 실행의 단위이고, 프로세스 내에 여러 개 생길 수 있습니다.

스레드
참조 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

스레드의 특징

  • 프로세스에서 Stack만 따로 할당받고, Code, Data, Heap은 공유합니다.
  • 서로 다른 스레드는 별도의 레지스터와 스택을 가지고 있지만, 힙 메모리는 서로 읽고 쓸 수 있습니다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 스레드도 그 변경 결과를 즉시 볼 수 있습니다.

Java에서의 스레드

  • JVM이 운영체제의 역할을 수행합니다.
  • 프로세스가 존재X, 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록 입니다.
  • 스레드의 수, 프로그램 코드의 메모리 위치, 스레드의 상태, 스레드 우선순위 등도 JVM이 관리합니다.
    ※ 즉, 개발자는 자바 스레드로 작동할 스레드 코드를 작성하고, 스레드 코드가 생명을 가지고 실행을 시작하도록 JVM에 요청하는 일 뿐이다.

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

멀티 프로세스(Multi Process)

하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 수행합니다.

장점

  • 프로세스에서 문제가 발생했을 때, 해당 프로세스만 오류가 나고 오류가 확산되지 않습니다.

    단점

  • Context Switching 에서의 오버헤드
    • 공유하는 메모리가 없기 때문에 ,Context Switching 이 발생하면 캐시에 있는 모든 데이터를 리셋하고 다시 캐시의 정보를 불러와야 합니다.
  • 프로세스간의 어려운 통신 기법(IPC)

멀티 스레드(Multi Thread)

하나의 응용프로그램을 여러 개의 스레드로 구성하고, 각 스레드가 하나의 작업을 수행합니다.

장점

  • 시스템 자원 소모 감소 (프로세스 생성 시 자원이 할당되는 시스템 콜 ↓)
  • 시스템 처리량 증가
    • 스레드 간 데이터 전달이 간단해지고, 자원 소모가 줄어듭니다.
    • 스레드 간의 작업량이 작아 Context Switching이 빠릅니다.
  • 간단한 통신으로 프로그램 응답 시간 단축 (프로세스의 Stack 영역을 제외한 모든 메모리를 공유하기에 통신의 부담이 적습니다.)

    단점

  • 주의 깊은 설계 필요
  • 디버깅의 어려움
  • 다른 프로세스에서 스레드 제어 불가.
  • 멀티 스레드의 경우 자원 공유의 문제가 발생합니다.
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받습니다.

멀티 스레드를 선호하는 이유

  1. 자원의 효율성 증가
    • 프로세스 생성 시 자원이 할당되는 시스템 콜 ↓
    • 프로세스 간의 Context Switching시 CPU 레지스터 교체 뿐 아니라 RAM과 CPU 사이의 캐시 메모리도 초기화되기 때문에 오버헤드가 큽니다.
    • 타 스레드와 자원을 공유하므로 시스템 자원 소모가 줄어듭니다.
  2. 처리 비용 감소 및 응답 시간 단축
    • 프로세스 간의 통신(IPC) 보다 스레드 간의 통신의 비용이 적습니다.

조심해야 할 점

  • 동기화 문제
  • 전역 변수를 참조하게 되면 thread safe 하지 않을 수 있다.

Thread Safe 란?

여러 스레드가 동시에 사용되어도 안전하다는 것을 의미합니다.
Thread Safe를 지키기 위한 4가지 방법이 존재합니다.

  • Mutual Exclusion(상호 배제)
  • Atomic Operation(원자 연산)
  • Thread-local Storage( 스레드 지역 저장소)
  • Re-entrancy( 재진입성)

Mutual Exclusion (상호 배제)

  • 공유 자원에 하나의 Thread 만 접근할 수 있도록 세마포어/뮤텍스로 락을 통제하는 방법입니다.

Atomic Operation (원자 연산)

  • 공유 자원에 원자적으로 접근하는 방법
    • 공유 자원 변경에 필요한 연산을 원자적으로 분리
    • 실제로 데이터의 변경이 이루어지는 시점에 Lock을 걸기
    • 데이터를 변경하는 시간 동안, 다른 스레드의 접근이 불가능하도록 하는 방법

Thread-local Storage (스레드 지역 저장소)

  • 공유 자원의 사용을 최대한 줄이고, 각각의 스레드에서만 접근 가능한 저장소들의 사용을 통해 동시 접근을 막는 방법

Re-entrancy (재진입성)

  • 스레드 호출과 상관 없이 프로그램에 문제가 없도록 작성하는 방법

참조
Noah님 - Process, Thread 차이가 뭐예요?
heejeong Kwon님 - 프로세스와 스레드의 차이
wooono 님 - 쓰레드 세이프란?

반응형

'CS 지식 > 운영체제' 카테고리의 다른 글

Deadlock(데드락)  (0) 2023.02.20
동기 vs 비동기, 블로킹 vs 논블로킹  (0) 2023.02.20
메모리의 구조  (0) 2023.02.16
컨텍스트 스위칭(Context Switching)  (0) 2023.02.13

댓글

💲 추천 글