PromleeBlog
sitemap
aboutMe

posting thumbnail
프로세스와 스레드의 차이 이해하기
Process vs. Thread, A Complete Guide to the Fundamental Difference

📅

🚀

들어가기 전에 🔗

이번 시간에는 컴퓨터가 여러 작업을 '동시에' 처리하는 것처럼 보이게 만드는 마법의 비밀, 바로
프로세스(Process)
스레드(Thread)
에 대해 알아보겠습니다.
이 두 용어는 운영체제(OS)의 핵심 개념으로, 이들의 차이를 명확히 이해하는 것은 효율적인 프로그램을 작성하기 위한 필수 지식입니다.

오늘은 단순히 '프로세스는 실행 중인 프로그램, 스레드는 그 안의 실행 단위'라는 한 줄 정의를 넘어, 두 개념을
하나의 공장과 그 안의 일꾼들
에 비유하여 그 근본적인 차이와 동작 원리를 깊이 있게 탐구해 보겠습니다.

🚀

프로세스(Process): 독립적인 작업 공간, '공장' 🔗

프로세스
는 운영체제로부터 자원을 할당받는
작업의 단위
입니다.
가장 쉽게는, 현재 컴퓨터에서
실행 중인 하나의 애플리케이션
이라고 생각할 수 있습니다.
여러분이 지금 보고 있는 웹 브라우저, 음악 플레이어, 코드 에디터 하나하나가 모두 별개의 프로세스입니다.

프로세스는 마치
완전히 독립된 하나의 공장
과 같습니다.
각 공장은 자신만의 건물(메모리 공간), 자신만의 기계 설비(CPU 할당), 그리고 자신만의 원자재(데이터)를 가지고 있습니다.
다른 공장에 불이 나도 내 공장은 안전한 것처럼, 하나의 프로세스가 오류로 종료되어도 다른 프로세스에는 영향을 주지 않는 것이 기본 원칙입니다.

이처럼, 각 프로세스는 운영체제로부터 완전히 독립된 메모리 영역(Code, Data, Heap, Stack)을 할당받습니다.
프로세스 A의 메모리 공간
프로세스 A의 메모리 공간

🚀

스레드(Thread): 작업 공간을 공유하는 '일꾼들' 🔗

스레드
는 프로세스 내에서 실행되는
흐름의 단위
입니다.
하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 이 스레드들이 실제로 작업을 수행하는 주체입니다.

스레드는 공장 안에서 일하는
여러 명의 일꾼들
과 같습니다.
모든 일꾼들(스레드)은 같은 공장 건물(프로세스의 메모리 공간) 안에서, 같은 기계 설비(Code)와 원자재(Data, Heap)를 공유하며 함께 일합니다.
하지만 각 일꾼은 자신만의 작업대와 도구(Stack)를 가지고 독립적으로 다른 작업을 수행할 수 있습니다.

한 일꾼은 재료를 다듬고, 다른 일꾼은 조립하며, 또 다른 일꾼은 포장을 하는 것처럼, 하나의 프로세스 내에서 여러 스레드가 각기 다른 작업을 동시에 처리하여 공장 전체의 생산성을 높일 수 있습니다.
이것이 바로
멀티스레딩(Multi-threading)
입니다.

🚀

그래서, 진짜 차이점은 무엇일까요? 🔗

프로세스와 스레드의 가장 핵심적인 차이점을 몇 가지 관점에서 비교해 보겠습니다.
  1. 자원 공유
    이것이 가장 근본적인 차이점입니다.
    프로세스는 각자 독립적인 메모리 공간을 가지므로 자원을 공유하지 않습니다.
    반면, 스레드는 자신이 속한 프로세스의 Code, Data, Heap 영역을 다른 스레드들과 공유합니다.
    오직 각자의 실행 상태를 기록하는 Stack 영역만 별도로 가집니다.
  2. 컨텍스트 스위칭 비용
    CPU가 여러 작업을 번갈아 가며 처리할 때, 현재 작업의 상태를 저장하고 다음 작업의 상태를 불러오는 과정을 '컨텍스트 스위칭'이라고 합니다.
    프로세스 간의 컨텍스트 스위칭은 무거운 메모리 구조 전체를 바꿔야 하므로 비용이 매우 비쌉니다.
    하지만 스레드 간의 스위칭은 공유하는 메모리는 그대로 둔 채, 가벼운 Stack 영역 등 최소한의 정보만 바꾸면 되므로 비용이 훨씬 저렴하고 빠릅니다.
  3. 안정성
    프로세스는 독립적이므로, 하나의 프로세스가 죽어도 다른 프로세스에 영향을 주지 않아 안정적입니다.
    하지만 스레드는 자원을 공유하기 때문에, 하나의 스레드에서 발생한 문제가 전체 프로세스에 영향을 미쳐 함께 종료될 수 있습니다.

🚀

주요 면접 예상 질문 🔗

프로세스와 스레드는 운영체제 지식의 기본이므로, 면접에서 그 이해도를 정확히 확인하고자 합니다.

1. 프로세스와 스레드의 차이점을 설명해주세요. 🔗

두 개념의 핵심적인 차이를 자원 공유 관점에서 설명하는 것이 좋습니다.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스 내에서 실행되는 흐름의 단위입니다.
가장 큰 차이는
메모리 공유 여부
입니다.
프로세스는 각자 독립된 메모리 공간을 할당받아 서로 영향을 주지 않지만, 스레드는 자신이 속한 프로세스의 Code, Data, Heap 메모리를 다른 스레드와 공유합니다.
이 때문에 스레드가 프로세스보다 훨씬 가볍고 컨텍스트 스위칭 비용이 낮다는 장점이 있습니다.

2. 멀티 프로세스 대신 멀티 스레드를 사용하는 이유는 무엇인가요? 🔗

효율성 관점에서 답변하는 것이 핵심입니다.
멀티 스레드는 멀티 프로세스에 비해 여러 가지
효율성
측면에서 이점을 가집니다.
첫째, 스레드는 프로세스의 메모리 공간을 공유하므로
데이터를 쉽게 주고받을 수 있고 통신 비용이 적습니다.
둘째, 새로운 스레드를 생성하고 관리하는 비용이 프로세스보다 훨씬 저렴합니다.
셋째, 결정적으로
컨텍스트 스위칭 비용이 훨씬 낮기 때문에
더 빠른 작업 전환이 가능하여 시스템 전체의 처리 성능을 높일 수 있습니다.
이러한 이유로, 하나의 작업을 여러 부분으로 나누어 동시에 처리하는 데에는 멀티 스레딩이 더 효율적입니다.

3. 멀티 스레딩 환경에서 발생할 수 있는 문제점은 무엇인가요? 🔗

장점뿐만 아니라 단점까지 이해하고 있는지 확인하는 심화 질문입니다.
멀티 스레딩의 가장 큰 문제점은 여러 스레드가
공유 자원(Shared Resource)에 동시에 접근
할 때 발생합니다.
이로 인해
경쟁 상태(Race Condition)
가 발생하여 데이터의 무결성이 깨질 수 있습니다.
또한, 여러 스레드가 서로 다른 자원을 점유한 채 상대방의 자원을 기다리는
교착 상태(Deadlock)
에 빠질 수도 있습니다.
이러한 문제들을 해결하기 위해, 공유 자원에 대한 접근을 제어하는
동기화(Synchronization)
기법, 예를 들어 Mutex나 Semaphore 등을 사용해야 합니다.

🚀

결론 🔗

오늘은 컴퓨터 과학의 기본 원리인 프로세스와 스레드에 대해 알아보았습니다.

참고 🔗