CS 지식

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

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

Overview

 

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

 

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

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

 

 

 

📅 관련 글

2023.01.13 - [CS 지식] - [CS 지식1.] 웹 브라우저의 동작원리

2023.02.23 - [CS 지식] - [CS 지식2.] DNS의 동작원리(Domain Name System)

2023.03.06 - [CS 지식] - [CS 지식3.] HTTP / HTTPS 란?

2023.03.07 - [CS 지식] - [CS 지식4.] OSI 7계층 & TCP/IP 4계층이란?

2023.03.17 - [CS 지식] - [CS 지식5.] 가상화란?

2023.05.24 - [CS 지식] - [CS 지식6.] HTTP 메서드(Method)란? / HTTP Status Code

2023.12.05 - [CS 지식] - [CS 지식7.] Kubernetes 구성요소와 Pod 생성 방식이란?

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

2023.12.30 - [CS 지식] - [CS 지식9.] 클라우드 컴퓨팅이란?(Public & Private Cloud / IaaS SaaS PaaS / Multitenancy)

2024.01.05 - [CS 지식] - [CS 지식10.] 웹1.0(Web1.0) vs 웹2.0(Web2.0) vs 웹3.0(Web3.0)

2024.02.02 - [CS 지식] - [CS 지식11.] NAT(Network Address Translation)란?

2024.05.22 - [CS 지식] - [CS 지식13.] 동기 및 비동기 처리란?

2024.05.23 - [CS 지식] - [CS 지식14.] 3tier 아키텍처란?

2024.08.28 - [CS 지식] - [CS 지식15.] SSR vs CSR vs ISR vs SSG

2024.11.09 - [CS 지식] - [CS 지식16.] stdin(표준입력) vs stdout(표준출력) vs stderr(표준에러)

2024.11.11 - [CS 지식] - [CS 지식17.] IPsec vs SSL/TLS

2024.11.22 - [CS 지식] - [CS 지식18.] Quantum Computing(양자 컴퓨팅)

 

 

 

 

 

 


 

 

 

 

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

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

 

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

 

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

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

 

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

 

 

 

 

 


 

 

 

프로세스와 스레드란?

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

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

키워드는 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이 많고 빠른 처리속도를 요구할 경우 멀티 스레드를 이용하는게 좋다.

 

 

 

Race Condition 및 Deadlock 개념

  • Race Condition(경쟁 상태): 두 개 이상의 스레드가 동시에 같은 데이터에 접근하고 변경할 때, 실행 순서에 따라 결과가 달라지는 문제이다. 이를 방지하려면 Lock, Mutex, Semaphore 같은 동기화 기법이 필요하다.
  • Deadlock(교착 상태): 두 개 이상의 스레드(또는 프로세스)가 서로 상대방이 가지고 있는 자원을 기다리며 무한 대기 상태에 빠지는 현상이다. 예방을 위해 자원 요청 순서를 정하거나 타임아웃, 데드락 감지 로직이 필요하다.

 

 

 

 

 

 


 

 

 

Context Switching이란?

 

 

Context Switching(문맥 교환)은 운영체제가 하나의 프로세스 또는 스레드의 상태(Context)를 저장하고, 다른 프로세스나 스레드의 상태를 불러와 실행을 전환하는 과정이다.

 


이 과정에는 다음과 같은 단계가 포함된다.

  • 현재 실행 중인 프로세스/스레드의 상태(레지스터, 프로그램 카운터 등)를 PCB(Process Control Block)에 저장
  • 다른 프로세스/스레드의 상태를 PCB에서 복원
  • CPU를 해당 작업에 할당

 


특징

  • 멀티태스킹의 핵심 요소이며, CPU는 빠르게 여러 작업 간을 전환함으로써 사용자에게 동시에 여러 작업이 실행되는 것처럼 보이게 한다.
    비용(오버헤드)이 발생하며, 프로세스 간 전환은 스레드 간보다 더 무겁다.

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

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

 

 

 

 

 

 


 

 

 

 

 

Python의 GIL(Global Interpreter Lock)

Python(CPython)에서는 GIL(Global Interpreter Lock)이라는 특수한 제약이 존재한다. 이는 동시에 두 개 이상의 스레드가 Python 바이트코드를 실행하지 못하도록 하는 일종의 락이다.

 

이로 인해 Python에서 멀티스레딩을 사용할 경우, CPU 바운드 작업에서는 병렬 처리 성능이 제대로 나오지 않으며 오히려 병목이 발생할 수 있다. 반면, 네트워크 통신이나 파일 I/O처럼 I/O 바운드 작업에는 멀티스레딩이 효과적이다.

 

해결 방안으로는 multiprocessing 모듈을 사용해 멀티프로세스를 병렬 처리하는 방식이 널리 사용된다.

 

 

 

 

 

 

 

 

 

 


 

 

 

 

마무리

프로세스와 스레드는 컴퓨터 시스템의 동작 원리를 이해하는 데 매우 중요한 개념이다.
둘의 차이점뿐 아니라 사용 목적, 성능상의 트레이드오프, 그리고 하이퍼스레딩 기술까지 알아두면 기술 면접뿐 아니라 실제 시스템 설계 시에도 큰 도움이 된다.

 

 

👉 멀티프로세싱은 안정성과 격리가 중요할 때,
👉 멀티스레딩은 빠른 응답성과 가벼운 자원 사용이 필요할 때 적합하다.
👉 또한 하이퍼스레딩은 멀티스레드 성능을 더 극대화할 수 있는 하드웨어적 지원 기술이다.

 

 

병렬성과 자원의 효율적인 사용은 현대 시스템 설계의 핵심 요소이며,
이를 이해하고 적절하게 선택하는 것이 좋은 개발자, 엔지니어의 핵심 역량 중 하나다.

 

 

 

 

 

 

 


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
반응형