프로세스와 스레드는 컴퓨터 시스템에서 실행되는 작업의 두 가지 주요 유형이다
- 정의
- 프로세스 : 독립적인 실행 프로그램, 자체 메모리 영역과 자원을 갖춘 시스템의 실행 단위
- 스레드 : 프로세스 내에서 실행되는 경량 실행 단위, 프로세스와 메모리 및 자원을 공유
- 메모리 공간
- 프로세스 : 각 프로세스는 독립적인 메모리 공간을 가지며 다른 프로세스와 직접적으로 공유하지 않는다
- 스레드 : 같은 프로세스 내의 스레드들과 스택을 제외한 코드, 데이터, 힙 메모리 공간을 공유하고 각각의 스레드는 독립적인 스택 영역을 가진다
- 자원 공유
- 프로세스 : 프로세스 간 자원 공유는 IPC 메커니즘을 통해 이루어진다 (파이프, 메시지 큐, 소켓)
- 스레드 : 같은 프로세스 내의 스레드들은 코드, 데이터, 힙, 영역 등을 공유하므로 통신이 더 빠르고 쉽다
- 생성 및 종료
- 프로세스 : 프로세스 생성 및 종류는 상대적으로 더 많은 시간과 자원을 소비한다
- 스레드 : 프로세스에 비해 더 적은 시간과 자원이 소모된다
- 오버헤드
- 프로세스 : 프로세스 간 컨텍스트 스위칭은 높은 오버헤드를 발생시킨다
- 스레드 : 스레드 간 컨텍스트 스위칭은 프로세스에 비해 낮은 오버헤드를 발생시킨다
- 안정성
- 프로세스 : 한 프로세스에서 발생한 오류가 다른 프로세스에 영향을 주지 않는다
- 스레드 : 한 스레드에서 발생한 오류가 동일한 프로세스의 다른 스레드에 영향을 줄 수 있다
요약
프로세스는 독립적인 실행 단위, 자체 메모리 공간과 자원을 가지며 서로 독립된 실행 환경을 유지
스레드는 프로세스 내에서 실행되는 경량 실행 단위, 같은 프로세스 내에서 메모리 및 자원을 공유
이로 인해 스레드는 프로세스에 비해 더 빠르게 생성되고 종료되며 낮은 오버헤드를 갖는다
그러나 스레드는 한 스레드에서 발생한 오류가 동일한 프로세스의 다른 스레드에 영향을 줄 수 있다
자바스크립트는 기본적으로 싱글 스레드 언어로 선계되어있다
웹 브라우저에서는 웹 워커, 공유 워커, 서비스 워커 등을 사용해서 멀티 스레드를 사용할 수 있다
Node.js 환경에서는 Worker Threads 모듈을 사용하여 멀티 스레드를 사용할 수 있다
프로세스의 경우 Node.js에서 child_process와 cluster 모듈을 사용하여 프로레스를 관리할 수 있다
IPC와 오버헤드가 무엇인가?
- IPC : 서로 다른 프로세스 간 데이터를 주고받거나 동기화를 수행하는 메커니즘 프로세스는 독립적인 메모리 공간과 자원을 가지며 표준 메모리 공유 방식으로 서로 정보를 전달 할 수 없다. 이런 경우 IPC를 사용하여 프로세스 간에 통신하고 협력할 수 있다
- 파이프(Pipe) : 파이프는 한 프로세스에서 생성되고 다른 프로세스로 데이터를 전달 할 수 있는 통신 채널이다. 파이프는 단방향 통신을 제공하며 양방향 통신이 필요한 경우 두 개의 파이프를 사용해야한다. 파이프는 주로 부모 프로세스와 자식 프로세스 간에 사용된다
- 명명된 파이프(Named Pipe) : 명명된 파이프는 파일 시스템에 저장되는 특별한 파일로 서로 관련 없는 프로레스 간에도 통신할 수 있다. 명명된 파이프는 파이프와 비슷하지만 실제 파일로 존재하여 다른 프로세스들이 접근 할 수 있는 이름을 가진다
- 소캣(Socket) : 소켓은 네트워크를 통해 프로세스 간 통신을 가능하게 하는 인터페이스다 소캣은 프로토콜. 주소 및 포트 번호와 같은 정보를 사용하여 프로세스 간의 연결을 설정하고 데이터를 주고 받는다 소켓은 같은 시스템 내의 프로세스 뿐 아니라 원격 시스템의 프로세와도 통신이 가능하다
- 메시지 큐(Message Queue) : 메시지 큐는 프로세스 간에 메시지를 전달하는 데 사용되는 데이터 구조다. 메시지 큐는 프로세스가 서로 독립적으로 실행될 수 있도록 지원하며 비동기 통신과 시스템 자원의 동기화를 용이하게 한다
- 오버헤드 : 어떤 작업이나 시스템을 실행하고 관리하기 위해 필요한 추가적인 자원 일반적으로 작업의 직접적인 목적과 무관한 시간, 메모리, 연산, 통신 등의 자원이 포함 된다
참고 자료
'과거공부모음' 카테고리의 다른 글
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 |