[CS] 프로세스와 스레드란?

김진회·2023년 1월 8일
0

cs

목록 보기
12/14

1. 프로세스 (Process)

  • 컴퓨터에서 실행되고 있는 프로그램. 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 👉 실행된 프로그램. 작업
  • 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.
    stack: 지역변수, 매개변수, 복귀 번지 등이 저장되어 있는 프로그램이 자동으로 사용하는 임시 메모리
    heap: 프로그래머가 동적으로 사용하는 영역. 메모리 할당, 반환되는 영역
    data: 전역변수, 정적변수, 배열, 구조체
    code: 작성한 코드가 들어가는 부분
  • 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다.
  • 다른 프로세스의 자원에 접근할 수 없음. 접근하려면 프로세스 간의 통신 방식을 따로 사용해야 한다. (파일, 소켓 등)

2. 스레드 (Thread)

  • 프로세스 내에서 실행되는 여러 흐름의 단위 (=프로세스의 특정한 수행 경로)
  • 프로세스 내에서 각각 Stack만 할당받고 그 외의 영역(Code, Data, Heap)은 공유
  • 같은 프로세스 안에 있는 여러 스레드들은 힙 공간을 공유
자바에는 프로세스가 존재하지 않고 스레드만 존재한다.
자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.

3. 멀티 프로세스

  • 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것
  • 장점
    • 한 프로세스에 문제가 발생하면 해당 프로세스만 죽고, 다른 것에는 영향이 없다.
  • 단점
    • ContextSwitching에서 많은 시간이 걸리고 오버헤드가 발생
    • 프로세스들은 서로의 자원을 공유할 수 없다.
      👉 ContextSwitching이 발생하면 캐시에 있는 모든 데이터를 리셋하고 다시 캐시 정보를 불러와야 한다.
    ContextSwitching: CPU에서 여러 프로세스들이 돌아가면서 작업을 처리하는 과정

4. 멀티 스레드

  • 하나의 응용프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리하는 것
  • 윈도우,리눅스와 같은 OS들이 멀티 프로세스를 지원하지만 멀티 스레드를 기본으로 사용
  • 웹 서버는 대표적인 멀티 스레드 응용 프로그램
  • 장점
    • 자원 효율성 증가 : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원 효율이 좋다.
    • 처리 비용 감소 : 스레드 사이의 작업량이 작아 ContextSwitching이 빠르고 통신 방법이 간단해서 자원 소모가 줄어든다.
    • 응답 시간 단축 : 자원 공유가 가능해 통신에 부담이 적고, 간단한 통신 방법으로 응답 시간 단축
  • 단점
    • 자원 공유의 문제(동기화 문제) 발생
    • 하나의 스레드에 문제가 발생하면 전체가 영향을 받는다.
    • 주의 깊은 설계가 필요하고 디버깅이 까다롭다.
    • 다른 프로세스에서 스레드를 제어할 수 없다.
      👉 즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.
    • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.

5. 멀티 스레드를 쓰는 이유

멀티 프로세스 대신 멀티 스레드를 사용하는 이유는 스레드의 장점이라고 생각하면 된다.

  • 자원 효율성 증가 : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원 효율이 좋다.
  • 처리 비용 감소 : 스레드 사이의 작업량이 작아 ContextSwitching이 빠르고 통신 방법이 간단해서 자원 소모가 줄어든다.
  • 응답 시간 단축 : 자원 공유가 가능해 통신에 부담이 적고, 간단한 통신 방법으로 응답 시간 단축
  • 대신, 자원 공유로 인한 동기화 문제를 주의해야 한다.

Reference

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

profile
SSAFY 7기. HMG. 협업, 소통, 사용자중심

0개의 댓글