본문 바로가기

과거공부모음

프로세스(Process)와 스레드(Thread)

프로세스와 스레드는 컴퓨터 시스템에서 실행되는 작업의 두 가지 주요 유형이다

 

  1. 정의
    1. 프로세스 : 독립적인 실행 프로그램, 자체 메모리 영역과 자원을 갖춘 시스템의 실행 단위
    2. 스레드 : 프로세스 내에서 실행되는 경량 실행 단위, 프로세스와 메모리 및 자원을 공유
  2. 메모리 공간
    1. 프로세스 : 각 프로세스는 독립적인 메모리 공간을 가지며 다른 프로세스와 직접적으로 공유하지 않는다
    2. 스레드 : 같은 프로세스 내의 스레드들과 스택을 제외한 코드, 데이터, 힙 메모리 공간을 공유하고 각각의 스레드는 독립적인 스택 영역을 가진다
  3. 자원 공유
    1. 프로세스 : 프로세스 간 자원 공유는 IPC 메커니즘을 통해 이루어진다 (파이프, 메시지 큐, 소켓)
    2. 스레드 : 같은 프로세스 내의 스레드들은 코드, 데이터, 힙, 영역 등을 공유하므로 통신이 더 빠르고 쉽다
  4. 생성 및 종료
    1. 프로세스 : 프로세스 생성 및 종류는 상대적으로 더 많은 시간과 자원을 소비한다
    2. 스레드 : 프로세스에 비해 더 적은 시간과 자원이 소모된다
  5. 오버헤드
    1. 프로세스 : 프로세스 간 컨텍스트 스위칭은 높은 오버헤드를 발생시킨다
    2. 스레드 : 스레드 간 컨텍스트 스위칭은 프로세스에 비해 낮은 오버헤드를 발생시킨다
  6. 안정성
    1. 프로세스 : 한 프로세스에서 발생한 오류가 다른 프로세스에 영향을 주지 않는다
    2. 스레드 : 한 스레드에서 발생한 오류가 동일한 프로세스의 다른 스레드에 영향을 줄 수 있다

 

요약

프로세스는 독립적인 실행 단위, 자체 메모리 공간과 자원을 가지며 서로 독립된 실행 환경을 유지

스레드는 프로세스 내에서 실행되는 경량 실행 단위, 같은 프로세스 내에서 메모리 및 자원을 공유

이로 인해 스레드는 프로세스에 비해 더 빠르게 생성되고 종료되며 낮은 오버헤드를 갖는다

그러나 스레드는 한 스레드에서 발생한 오류가 동일한 프로세스의 다른 스레드에 영향을 줄 수 있다

자바스크립트는 기본적으로 싱글 스레드 언어로 선계되어있다

웹 브라우저에서는 웹 워커, 공유 워커, 서비스 워커 등을 사용해서 멀티 스레드를 사용할 수 있다

Node.js 환경에서는 Worker Threads 모듈을 사용하여 멀티 스레드를 사용할 수 있다

프로세스의 경우 Node.js에서 child_process와 cluster 모듈을 사용하여 프로레스를 관리할 수 있다

 

 

IPC와 오버헤드가 무엇인가?

  • IPC : 서로 다른 프로세스 간 데이터를 주고받거나 동기화를 수행하는 메커니즘 프로세스는 독립적인 메모리 공간과 자원을 가지며 표준 메모리 공유 방식으로 서로 정보를 전달 할 수 없다. 이런 경우 IPC를 사용하여 프로세스 간에 통신하고 협력할 수 있다
    • 파이프(Pipe) : 파이프는 한 프로세스에서 생성되고 다른 프로세스로 데이터를 전달 할 수 있는 통신 채널이다. 파이프는 단방향 통신을 제공하며 양방향 통신이 필요한 경우 두 개의 파이프를 사용해야한다. 파이프는 주로 부모 프로세스와 자식 프로세스 간에 사용된다
    • 명명된 파이프(Named Pipe) : 명명된 파이프는 파일 시스템에 저장되는 특별한 파일로 서로 관련 없는 프로레스 간에도 통신할 수 있다. 명명된 파이프는 파이프와 비슷하지만 실제 파일로 존재하여 다른 프로세스들이 접근 할 수 있는 이름을 가진다
    • 소캣(Socket) : 소켓은 네트워크를 통해 프로세스 간 통신을 가능하게 하는 인터페이스다 소캣은 프로토콜. 주소 및 포트 번호와 같은 정보를 사용하여 프로세스 간의 연결을 설정하고 데이터를 주고 받는다 소켓은 같은 시스템 내의 프로세스 뿐 아니라 원격 시스템의 프로세와도 통신이 가능하다
    • 메시지 큐(Message Queue) : 메시지 큐는 프로세스 간에 메시지를 전달하는 데 사용되는 데이터 구조다. 메시지 큐는 프로세스가 서로 독립적으로 실행될 수 있도록 지원하며 비동기 통신과 시스템 자원의 동기화를 용이하게 한다
  • 오버헤드 : 어떤 작업이나 시스템을 실행하고 관리하기 위해 필요한 추가적인 자원 일반적으로 작업의 직접적인 목적과 무관한 시간, 메모리, 연산, 통신 등의 자원이 포함 된다

 

 

참고 자료

 

[JAVA]프로세스와 스레드의 차이점

프로세스(process)란 무엇일까? > 프로세스란 운영체제로부터 자원(공간)을 할당받은 작업의 단위입니다. 프로그램과 프로세스의 차이점은 프로그램은 실행되지않은 정적인 파일(\.EXE, \.TXT)이고

velog.io

 

프로세스와 스레드의 차이

프로세스와 스레드의 차이는 프로세스와 스레드, 그리고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 확인하기 위해 기술면접에서 단골 질문 사항으로 나온다.

velog.io

 

'과거공부모음' 카테고리의 다른 글

async/await  (0) 2023.04.17
프로미스(Promise)  (0) 2023.04.17
동기(Synchronous)와 비동기(Asyncronous)  (0) 2023.04.14
node.js 이벤트 루프(event loop)  (0) 2023.04.13
node.js 콜백(callback)  (0) 2023.04.13