프로세스와 스레드

eunbi·2025년 2월 2일

CS 총정리

목록 보기
9/22

프로세스(Process)란?

📌 프로세스는 실행 중인 프로그램의 인스턴스이다.

📌 운영체제(OS)에서 독립된 메모리 공간을 할당받아 실행된다.

📌 하나의 프로세스는 여러 개의 스레드(Thread)를 포함할 수 있다.

프로세스의 특징

  • 독립적인 실행 단위 → 각 프로세스는 서로 영향을 주지 않음.
  • 고유한 메모리 공간 → 코드, 데이터, 힙, 스택을 포함.
  • 비용이 크다 → 새로운 프로세스를 생성하는 것은 많은 리소스를 필요로 함.
  • 프로세스 간 통신(IPC, Inter-Process Communication)이 필요 → 공유 메모리, 파이프, 메시지 큐 등을 사용해야 함.

프로세스 예시

  • 크롬 브라우저에서 여러 개의 탭을 실행하면 각 탭이 별도의 프로세스로 동작함.
  • 개발 환경에서 VS CodeChrome을 동시에 실행하면 각각 하나의 프로세스로 실행됨.

스레드(Thread)란?

📌 스레드는 프로세스 내에서 실행되는 작업의 단위이다.

📌 같은 프로세스 내의 스레드들은 코드(Code), 데이터(Data), 힙(Heap) 메모리를 공유하지만, 각자의 스택(Stack)을 가짐.

📌 여러 개의 스레드가 협력하여 하나의 프로그램을 빠르게 실행할 수 있음.

스레드의 특징

  • 프로세스 내에서 동작 → 같은 메모리 공간을 공유하여 빠른 데이터 교환 가능.
  • 자원 공유 → 효율적이지만, 동기화 문제가 발생할 수 있음 (경쟁 상태, 데드락 등).
  • 비용이 적음 → 프로세스를 생성하는 것보다 스레드를 생성하는 것이 비용이 적다.
  • 멀티스레딩 가능 → 하나의 프로세스에서 여러 작업을 동시에 수행할 수 있음.

스레드 예시

  • 크롬 브라우저에서 하나의 탭(프로세스) 안에서 여러 개의 네트워크 요청을 처리하는 작업(스레드).
  • 게임에서 그래픽 렌더링, 사용자 입력, 네트워크 통신을 각각 다른 스레드로 처리.

프로세스와 스레드의 개념 정리

구분프로세스(Process)스레드(Thread)
개념실행 중인 프로그램 인스턴스프로세스 내에서 실행되는 작업 단위
메모리코드, 데이터, 힙, 스택을 개별적으로 가짐코드, 데이터, 힙은 공유, 스택은 개별적으로 가짐
독립성서로 독립적이며, 프로세스 간 데이터 공유 불가같은 프로세스 내에서 데이터 공유 가능
생성 비용새 프로세스를 만들면 새로운 메모리 할당이 필요 → 비용이 높음스레드는 메모리를 공유하므로 생성 비용이 낮음
실행 속도새로운 프로세스를 실행하는 데 시간이 걸림스레드는 빠르게 실행 가능
통신 방식IPC(Inter-Process Communication)를 통해 별도의 통신 방식 필요메모리를 공유하므로 빠른 데이터 교환 가능

자바스크립트에서의 프로세스와 스레드

📌 자바스크립트는 기본적으로 싱글 스레드(Single Thread) 언어이다.

📌 하지만 브라우저와 Node.js 환경에서는 멀티스레딩과 유사한 기능을 제공한다.

Node.js의 Worker Threads

  • Node.js는 기본적으로 싱글 스레드 이벤트 루프를 사용하지만, Worker Threads API를 사용하면 멀티스레딩처럼 동작 가능.
  • CPU 집약적인 작업(예: 대량 데이터 처리, 암호화 연산)에서 성능을 개선하는 데 활용됨.

브라우저의 Web Workers

  • Web Workers를 사용하면 백그라운드에서 실행되는 스레드를 만들 수 있음.
  • UI 렌더링을 방해하지 않고 무거운 작업을 처리 가능.

비동기 처리

  • 자바스크립트는 싱글 스레드지만, 비동기 처리(Promise, async/await, setTimeout)를 통해 멀티태스킹처럼 동작 가능.
  • 이벤트 루프(Event Loop)와 콜백 큐(Callback Queue)를 활용하여 비동기 작업을 효율적으로 처리.

결론

📌 프로세스는 독립된 실행 단위이며, 메모리를 개별적으로 사용한다.

📌 스레드는 프로세스 내에서 실행되며, 메모리를 공유하여 더 빠르게 동작한다.

📌 자바스크립트는 기본적으로 싱글 스레드이지만, Worker Threads나 Web Workers를 사용하여 멀티스레딩과 유사한 동작이 가능하다.

0개의 댓글