프로세스(Process)와 스레드(Thread)의 차이에 대해 설명해 주세요.

면접용 답변

프로세스는 운영체제로부터 자원을 할당받아 독립적으로 실행되는 프로그램 단위이고, 스레드는 프로세스 내에서 실행되는 작업의 흐름 단위입니다. 프로세스는 독립적인 메모리 공간을 가지므로 안정성이 높지만, 컨텍스트 스위칭 비용이 크고 프로세스 간 통신이 어렵다는 단점이 있습니다. 반면, 스레드는 메모리를 공유하기 때문에 자원 접근이 빠르고 효율적이지만, 하나의 스레드에서 문제가 발생하면 전체 프로세스에 영향을 줄 수 있습니다.

개념 설명

프로세스(Process)

"Process is a program in execution"

실행 중인 프로그램으로, 운영체제가 자원을 할당하는 단위

  • 특징

    • 독립적인 주소 공간(Code, Data, Heap, Stack 등)을 가짐

    • 다른 프로세스와 메모리를 공유하지 않음

    • 프로세스 간 통신(IPC)은 별도의 방법(소켓, 파이프 등)을 사용

    • 생성/소멸 시 오버헤드가 큼, 컨텍스트 스위칭 비용도 큼

  • 예시

    • 크롬 브라우저의 각 탭은 별도의 프로세스로 동작(한 탭이 죽어도 다른 탭에는 영향 없음)

스레드(Thread)

"A thread(or lightweight process) is a basic unit of CPU utilization"

프로세스 내부에서 실행되는 작업의 최소 단위

  • 특징

    • 같은 프로세스 내에서 메모리와 자원을 공유

    • 컨텍스트 스위칭 비용이 작고, 실행 속도가 빠름

    • 스레드 간 통신이 용이함

    • 하나의 스레드에서 문제가 생기면 전체 프로세스에 영향을 줄 수 있음

    • 자원을 공유하므로 빠르고 효율적이지만 동기화가 필요

  • 예시

    • 하나의 웹 서버에서 여러 요청을 동시에 처리할 때 각각의 요청을 스레드로 처리

프로세스 vs 스레드

항목
프로세스
스레드

정의

실행 중인 프로그램 단위

프로세스 내 작업 단위

메모리 구조

각각 독립된 메모리 공간 사용

같은 메모리 공간을 공유

자원 할당

운영체제가 자원을 개별로 할당

부모 프로세스의 자원을 공유

생성/소멸 비용

크다

작다

컨텍스트 스위칭

느림

빠름

통신 방법

IPC(프로세스 간 통신) 사용 (소켓, 파이프 등)

메모리 공유로 직접 접근 가능

안정성

높음 (문제 발생 시 다른 프로세스에 영향 없음)

낮음 (하나가 문제되면 전체 영향)

꼬리 질문

  • 스레드를 사용할 때 발생할 수 있는 문제와 그 해결 방법은 무엇인가요?

  • 멀티프로세스와 멀티스레드의 장단점을 비교해보세요.

  • Java에서 스레드를 생성하고 실행하는 방법을 설명해주세요.

참고

https://somaz.tistory.com/265

Last updated