CS 지식

[CS 지식8.] 프로세스(Process)와 스레드(Thread)란?

Somaz 2023. 12. 27. 01:38
728x90
반응형

Overview

프로세스와 스레드에 대해서 공부해보려고 한다.

 

"프로세스와 스레드의 차이점" 기술면접에서 가장 많이 묻는 질문 중 하나이다.

프로세스와 스레드는 모두 서로 관련되어 있고 매우 유사하므로 둘 사이의 차이점을 이해하는 데 혼란을 야기한다. 프로세스와 스레드는 독립적인 실행 순서이지만 프로세스가 서로 다른 메모리 공간에서 실행되는 반면 동일한 프로세스의 스레드는 공유 메모리 공간에서 실행된다는 점에서 차이가 있다.


 

프로그램과 프로세스의 관계

프로그램은 특정 작업을 수행하기 위해 작성된 일련의 지침이다. 일반적으로 디스크나 다른 저장 매체에 저장되는 정적 엔터티이다. 프로그램은 실행될 떄 프로세스가 된다.

 

프로그램을 실행하면 운영체제는 해당 프로그램을 디스크에서 시스템 메모리로 로드하고 실행을 한다. 프로그램의 실행 중인 인스턴스를 프로세스라고 한다. 각 프로세스에는 자체 메모리 공간와 시스템 리소스가 있다.

 

그리고 프로그램은 정적이지만 프로세스는 동적이다. 프로그램이 시작될 때 생성되고 실행이 끝나면 종료된다.

동일한 프로그램의 여러 인스턴스를 동시에 실행하여 여러 프로세스를 생성할 수 있다. 각 프로세스는 자체 메모리와 리소스를 가지며 독립적이다.

 

요약하자면 프로그램은 코드이고 프로세스는 코드가 실행될 때 발생하는 것이다.

 


프로세스와 스레드란?

프로세스란 자체 메모리 공간이 있는 독립 엔터티로, 애플리케이션에 대한 격리 및 보안을 제공한다.

즉, 프로그램의 실행중인 인스턴스이다.

키워드는 Isolation(격리)이다.

 

스레드란 프로세스 내의 더 가벼운 공유 메모리 단위로 작업의 효율적인 병렬 실행을 가능하게 한다.

프로세스의 하위 집합이며 경량 프로세스라고도 한다. 프로세스에는 둘 이상의 스레드가 있을 수 있으며 이러한 스레드는 스케줄러에 의해 독립적으로 관리된다.

키워드는 Concurrency(동시성)이다.

Aspect 프로세스(Process) 스레드(Thread)
Definition 컴퓨터에서 실행되는 프로그램의 인스턴스이다. 스케줄러가 독립적으로 관리할 수 있는 프로그래밍된 명령의 소규모 시퀀스이다.
Memory 자체적인 별도의 메모리 공간(힙, 스택 등)이 있다. 프로세스 내에서 메모리 공간을 공유한다(프로세스의 힙 및 전역 변수에 액세스할 수 있다).
Creation 프로세스 생성은 상위 프로세스의 메모리 복제를 포함하므로 리소스 집약적이고 속도가 느리다. 스레드를 생성하는 것은 프로세스와 메모리를 공유하므로 리소스 집약도가 낮고 속도도 빠르다.
Communication IPC(프로세스 간 통신)는 별도의 메모리 공간으로 인해 복잡하고 속도가 느리다. 스레드 간 통신은 동일한 메모리 공간을 공유하므로 더 쉽고 빠르다.
Control 운영 체제에 의해 제어된다. 각 프로세스는 독립적으로 작동한다. 이를 소유한 프로세스에 의해 제어된다. 프로세스 내의 모든 스레드는 프로세스 변경으로 인해 영향을 받을 수 있다.
Overhead 별도의 메모리 및 리소스 관리로 인해 오버헤드가 높아진다. 스레드가 프로세스의 리소스를 공유하므로 오버헤드가 줄어든다.
Use Case 격리된 실행, 안정성 및 보안이 필요한 애플리케이션에 적합하다. 동일한 애플리케이션 내에서 동시 실행이 필요한 작업에 적합하다.
Failure Impact 하나의 프로세스 충돌은 다른 프로세스에 직접적인 영향을 미치지 않는다. 스레드 충돌은 동일한 프로세스 내의 다른 스레드에 영향을 미칠 수 있다.

 

 


프로세스(Process)

출처 : https://www.javatpoint.com/process-vs-thread

 

OS의 프로세스는 다음 상태 중 하나로 유지된다.

  • NEW
    • 새 프로세스가 생성되고 있다.
  • READY
    • 프로세스가 준비되어 프로세서에 할당되기를 기다리고 있다.
  • RUNNING
    • 프로그램이 실행되고 있습니다.
  • WAITING
    • 일부 이벤트가 발생하거나 발생하기를 기다리는 중이다.
  • TERMINATED
    • 실행이 완료되었다.

 


 

스레드(Thread)

 

출처 : https://www.javatpoint.com/process-vs-thread

 

 

하나의 프로세스 내의 모든 스레드는 서로 상호 연관되어 있다. 스레드에는 피어 스레드와 공유되는 데이터 세그먼트, 코드 세그먼트, 파일 등과 같은 몇 가지 공통 정보가 있다. 그러나 자체 레지스터, 스택 및 카운터를 포함한다.

 


 

Mutli Thread(멀티스레드)와 Mutli Process(멀티프로세스)란?

`Multi Threading`과 `Multi Processing`은 효율성과 성능을 높이기 위해 컴퓨팅 작업을 병렬화하는 두 가지 접근 방식이다.

출처 : https://medium.com/@noueruzzaman/tug-of-war-multiprocessing-vs-multithreading-55341c1f2103

 

Multi Thread Application

`Multi Threading`에서는 단일 프로세스에 여러 스레드가 포함될 수 있다. 프로세스 내의 모든 스레드는 동일한 메모리 공간을 공유하므로 스레드 간에 정보를 더 쉽고 빠르게 공유할 수 있다. 그러나 동일한 메모리를 공유하므로 경쟁 조건 및 교착 상태와 같은 문제를 방지하려면 관리가 필요하다. Mutli Thread는 적은 메모리와 적은 CPU 점유시간을 가지며 Context Switching 비용이 낮다.

 

 

Multi Process Application

`Multi Process`에서는 각각 자체 메모리 공간이 있는 여러 프로세스가 사용된다. 한 프로세스의 충돌이 다른 프로세스에 직접적인 영향을 미치지 않으므로 이러한 격리를 통해 안정성이 향상될 수 있다. 그러나 프로세스 간 통신(프로세스 간 통신)은 스레드에 비해 더 복잡하고 느릴 수 있다. Multi Process는 많은 메모리와 CPU 점유시간을 가지며 Context Switching이 느리다.

따라서 메모리를 나누어 안정성을 높일때는 Multi Process를 Context Switching이 많고 빠른 처리속도를 요구할 경우 멀티 스레드를 이용하는게 좋다.


 

Context Switching이란?

 

 


 

 

Hyper Thread란?

하이퍼스레딩은 Intel에서 개발한 기술로, 더 넓은 의미에서는 `SMT(Simultaneous Multithreading)`라고도 알려져 있다. 단일 물리적 프로세서 코어가 운영 체제 및 실행되는 애플리케이션에 대해 두 개의 별도 논리 프로세서처럼 작동할 수 있다. 

 

출처 : https://www.intel.co.kr/content/www/kr/ko/gaming/resources/hyper-threading.html

 

  1. Physical Core Duplication(물리적 코어 중복)
    • 프로세서 코어에는 각 스레드의 현재 상태를 관리하기 위한 중복된 레지스터 세트와 기타 하드웨어가 있다.
  2. Shared Resources(공유 리소스)
    • 레지스터와 같은 일부 리소스는 복제되는 반면 실행 엔진 및 캐시와 같은 리소스는 공유된다.
  3. Improved Efficiency(효율성 향상)
    • 하이퍼스레딩은 일반적으로 메모리 가져오기 또는 데이터 입력/출력과 같은 지연 중에 다른 스레드가 기다리는 동안 한 스레드가 코어의 리소스를 사용할 수 있도록 하여 계산 효율성을 향상시킨다.
  4. Parallelism(병렬성)
    • 물리적 코어를 더 추가하지 않고도 병렬성(프로세서가 동시에 수행할 수 있는 작업)의 양을 늘린다.

하이퍼스레딩은 CPU가 종종 데이터를 기다리는 시나리오에서 가장 효과적이며 이러한 유휴 시간 동안 다른 스레드가 프로세서 리소스를 사용할 수 있도록 허용한다. 이로 인해 멀티태스킹 또는 멀티스레드 애플리케이션의 성능이 향상된다.

 

 

 


Reference

https://www.javatpoint.com/process-vs-thread

 

https://magi82.github.io/process-thread/

 

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

 

https://velog.io/@jackjack/%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EB%B9%84%EA%B5%90-%EC%A0%95%EB%A6%AC

 

https://medium.com/@noueruzzaman/tug-of-war-multiprocessing-vs-multithreading-55341c1f2103

 

https://www.intel.co.kr/content/www/kr/ko/gaming/resources/hyper-threading.html

728x90
반응형