[Node.js_4기] 면접 준비 1일차 (24/03/27)

2024. 3. 27. 22:01공부/면접 준비

목차

 

1. 학습 내용

2. 내용 정리

3. 답변

4. 생각 정리

 

1. 학습 내용 

 

  1. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.
    프로세스와 스레드의 차이 (velog.io)
  2. 멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.

 

2. 내용 정리 

 

1. 프로세스와 쓰레드

0) 프로그램 

작업이 실행되지 않은 상태의 코드 덩어리

 

1) 프로세스 

프로세스는 실행 중인 프로그램을 의미합니다. 운영체제에서 할당하는 자원(메모리, 파일 핸들 등)과 코드, 데이터를 포함한 실행의 단위입니다. 각 프로세스는 독립된 메모리 영역(Code, Data, Stack, Heap 등)을 가지며, 다른 프로세스와는 독립적으로 실행됩니다.

 

2) 쓰레드

쓰레드는 프로세스 내에서 실행되는 여러 흐름의 단위입니다. 한 프로세스 내에서 동작하는 여러 실행 흐름으로, 프로세스의 자원을 공유하며 실행됩니다. 각 쓰레드는 프로세스 내에서 스택만 독립적으로 가지며, 코드, 데이터 영역 및 힙 영역은 공유합니다.

 

3) 둘의 차이 

프로세스는 독립된 메모리 공간을 가지지만, 쓰레드는 메모리와 자원을 공유합니다.
쓰레드는 프로세스에 비해 생성, 관리, 컨텍스트 스위칭의 비용이 낮습니다.
프로세스 간 통신은 복잡한 IPC 기술이 필요하지만, 쓰레드 간 통신은 같은 프로세스 내 메모리를 직접 접근함으로써 이루어집니다.
프로세스는 완전히 독립적인 반면, 쓰레드는 프로세스 내에서 서로 의존적입니다.

 

2. 멀티프로세스와 멀티쓰레드

1) 멀티프로세스

멀티 프로세스란 여러 개의 독립적인 프로세스가 동시에 실행되는 방식을 말합니다.

각 프로세스는 독립된 메모리 영역을 가지고, 서로 다른 주소 공간에서 실행됩니다. 이 방식은 프로세스 간의 간섭을 최소화하고, 하나의 프로세스에 문제가 발생해도 다른 프로세스에는 영향을 미치지 않는 안정성을 제공하지만, 자원 사용률과 시스템 부하가 더 높습니다.

 

2) 멀티쓰레드 

멀티쓰레드는 하나의 프로세스 내에서 여러 개의 쓰레드가 동시에 실행되는 방식을 말합니다.

쓰레드들은 프로세스의 자원(코드, 데이터, 힙 영역)을 공유하며, 각각의 스택만 독립적으로 가집니다. 이로 인해 자원의 효율적인 사용과 빠른 처리 속도를 달성할 수 있지만, 쓰레드 간의 동기화 문제와 오류 전파가 발생할 수 있습니다.

 

 

3. 답변 

 

1) 프로세스와 쓰레드에 대한 설명과 둘의 차이

 

프로세스는 메모리에 올라와 실행중인 프로그램을 의미하고, 쓰레드는 프로세스 내부에서 작업을 실행하는 흐름 단위입니다.  하나의 독립적인 메모리 공간을 사용하기 때문에 생성, 관리, 컨텍스트 스위칭의 비용이 높은 대신 안정성과 독립성을 제공합니다.

 

쓰레드는  하나의 프로세스 내부에서 쓰레드끼리 메모리를 공유하기 때문에 생성, 관리, 컨텍스트 스위칭의 비용이 낮아 자원의 효율적인 사용과 빠른 처리 속도를 제공하는 대신 쓰레드 간의 동기화 문제와 오류 전파가 발생할 수 있습니다.  

 

2) 멀티 프로세스와 멀티 쓰레드

멀티 프로세스란 여러 개의 독립적인 프로세스가 동시에 실행되는 방식을 말합니다.

각 프로세스는 독립된 메모리 영역을 가지고, 서로 다른 주소 공간에서 실행됩니다. 이 방식은 프로세스 간의 간섭을 최소화하고, 하나의 프로세스에 문제가 발생해도 다른 프로세스에는 영향을 미치지 않는 안정성을 제공하지만, 자원 사용률과 시스템 부하가 더 높습니다.

 

멀티쓰레드는 하나의 프로세스 내에서 여러 개의 쓰레드가 동시에 실행되는 방식을 말합니다.

쓰레드들은 프로세스의 자원(코드, 데이터, 힙 영역)을 공유하며, 각각의 스택만 독립적으로 가집니다. 이로 인해 자원의 효율적인 사용과 빠른 처리 속도를 달성할 수 있지만, 쓰레드 간의 동기화 문제와 오류 전파가 발생할 수 있습니다.

 

4. 생각 정리 

 

Node. JS는 싱글 쓰레드지만, 멀티 쓰레드처럼 동작합니다.
이는, Node. JS는 libuv라이브러리가 포함된 V8 엔진을 기반으로 하므로 쓰레드 내부에서 작업을 처리할 새로운 쓰레드 풀을 생성하고 비동기 처리가 가능합니다.
즉, Node. JS 내부적으로 필요할 때마다 worker_threads를 생성하는 방식으로 작동하기 때문에 싱글 쓰레드임에도 멀티 쓰레드처럼 보입니다. Node. JS는 이론적으론 멀티 쓰레드지만, 개념적으로는 싱글 쓰레드인 것입니다다.

(Js가 싱글 쓰레드 언어라서 Node.js가 싱글 쓰레드임이 아니라는 이야기 입니다.)