스레드와 프로세스 차이

이호용·2021년 7월 12일
0

Philosophers

목록 보기
1/5

이번시간 요약 : 프로그램 → 프로세스 → 스레드

프로그램

하드웨어에 저장되어있는 코드 덩어리.

특징

  • 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.
  • 프로그램을 실행하는 순간, 파일은 메모리에 올라가고 이 상태를 동적인 상태라고 한다.
  • 이 동적인 상태의 프로그램을 프로세스라고 한다.!

프로세스

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

  • “컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램”
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • 즉, 동적인 개념으로는 실행된 프로그램을 의미한다.
  • 과거에는 프로그램을 실행할때 하나의 프로세스로 모든걸 진행햇다.
  • 하지만 시간이 지날수록 프로그램이 복잡해지고 하나의 프로그램에 프로세스가 여러개 실행되는 일이 발생했다.
  • 문제는 이런 프로세스는 자신에게 할당된, 메모리외에 다른 메모리에 접근하기도 힘들뿐더러 자칫하면 오류도 발생한다. (프로세스 별로 code,data,Heap영역 공유안함)
  • 이를 해결하기위해 사용되는게 스레드 개념이다.

스레드

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

  • 프로세스의 특정한 수행 경로
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위

특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 아까 프로그램이 코드 덩어리라고 했는데, 스레드도 코드에 비유하자면 스레드는 코드 내에 선언된 함수들이 되고 따라서 main 함수 또한 일종의 스레드라고 볼 수 있게 되는 것이다.

멀티 프로세스와 멀티 스레드의 차이

멀티 프로세스

  • 하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는것

장점

  • 여러 프로세스중 하나의 프로세스가 문제가 발생하면 해당 프로세스가 죽는것 이상으로 다른 영향은 없다.

단점

  • context Switching에서의 오버헤드
  • 프로세스별로 새로운 캐쉬 메모리를 초기화하고 필수 작업들을 거쳐야해 많은 소요시간이 발생된다.
  • 프로세스 각각 독립된 메모리를 받았기에, 프로세스들 사이에 변수를 공유할수 없다.

참고 Context Switching란?
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.

출처: https://jeong-pro.tistory.com/93 [기본기를 쌓는 정아마추어 코딩블로그]

멀티 스레드

멀티스레드를 사용하면 각각의 스레드 중 어떤 것이 어떤 순서로 실행될 지 그 순서를 알 수 없다.

  • 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다.
  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만 멀티 스레딩을 기본으로 하고 있다.
  • 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.

장점

시스템 자원 소모 감소 (자원의 효율성 증대)
Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
시스템 처리량 증가 (처리 비용 감소)
스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
스레드 사이의 작업량이 작아 Context Switching이 빠르다
간단한 통신 방법으로 인한 프로그램 응답 시간 단축
스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.

단점

  • 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  • 주의 깊은 설계가 필요하다.
  • 디버깅이 까다롭다.
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
  • 다른 프로세스에서 스레드를 제어할 수 없다. (즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.)
  • 멀티 스레드의 경우 자원 공유의 문제가 발생한다. (동기화 문제)
  • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

멀티 프로세스 대신 멀티 스레드를 사용하는 이유?

멀티 프로세스 대신 멀티 스레드를
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

장점

  1. 자원의 효율성 증대
    프로세스를 할당하여, 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능.

  2. 처리 비용 감소 및 응답 시간 단축
    프로세스간의 통신보다 스레드간의 통신 비용이 적으므로 작업들 간의 통신의 부담이 줄어든다.
    스레드는 stack영역을 제외한 모든 메모리를 공유하기 떄문
    context switching시 스레드는 stack영역만 처리한다.

동기화 문제: 스레드간의 자원공유는 전역변수(데이터세그먼트)를 이용하므로 함께 상용할 떄 충돌이 발생할수 잇다.

출처 : https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

0개의 댓글