TIL | 면접 카타 23, 24번

bubblegum·2024년 3월 27일
0

Today I learn(TIL)

목록 보기
38/84
post-thumbnail

23번. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.

프로세스(Process)와 쓰레드(Thread)는 컴퓨터 과학에서 중요한 개념입니다. 이 둘은 다중 작업(multitasking) 환경에서 프로그램이 실행되는 방식을 설명합니다.

1. 프로세스(Process)

  • 프로세스는 실행 중인 프로그램의 인스턴스(instance)입니다. 각 프로세스는 독립적으로 메모리 공간을 할당받고, 운영체제(OS)의 자원을 사용합니다.

  • 각각의 프로세스는 운영체제에 의해 개별적으로 관리되며, 다른 프로세스와는 독립적으로 실행됩니다. 이는 한 프로세스가 다른 프로세스에게 영향을 미치지 않고 실행될 수 있음을 의미합니다.

  • 프로세스는 각각 자신만의 주소 공간(address space)을 가지며, 다른 프로세스와 데이터를 공유하기 위해서는 IPC(Inter-Process Communication)와 같은 메커니즘이 필요합니다.

  • 새로운 프로세스를 생성하기 위해서는 새로운 메모리 공간을 할당하고, 프로그램을 로드하고 초기화하는 등의 오버헤드가 발생합니다.

2. 쓰레드(Thread)

  • 쓰레드는 프로세스 내에서 실행되는 흐름의 단위입니다. 하나의 프로세스는 여러 개의 쓰레드를 가질 수 있습니다.

  • 쓰레드는 같은 프로세스 내에서 공유된 메모리 공간을 사용하므로, 데이터를 공유하기가 훨씬 쉽고 빠릅니다.

  • 쓰레드는 프로세스의 다른 쓰레드와는 달리 자원을 공유하므로, 쓰레드 간의 통신과 동기화가 필요합니다.

  • 쓰레드를 생성하거나 종료하는 오버헤드는 프로세스에 비해 상대적으로 적습니다.

3. 차이점

  • 프로세스는 실행 중인 프로그램의 인스턴스이며, 독립된 메모리 공간을 가지고 있다.
  • 쓰레드는 프로세스 내에서 실행되는 흐름의 단위로, 같은 프로세스 내에서 메모리를 공유한다.
  • 프로세스와 쓰레드는 모두 다중 작업 환경에서 프로그램을 효율적으로 실행할 수 있도록 도와주는 도구입니다.

4. JavaScript와 Node.Js의 싱글 스레드

  • 자바스크립트는 주로 싱글 스레드(single-threaded)로 알려져 있습니다. 이것은 자바스크립트 엔진이 단일 호출 스택(single call stack)을 사용하여 코드를 실행한다는 것을 의미합니다.

  • 싱글 스레드 모델에서는 한 번에 하나의 작업만을 처리할 수 있습니다. 이는 한 번에 하나의 작업이 완료될 때까지 다음 작업을 실행할 수 없음을 의미합니다. 따라서 자바스크립트는 이러한 특성으로 인해 이벤트 루프(event loop)와 비동기(asynchronous) 프로그래밍 패턴을 사용하여 비동기 작업을 처리합니다.

  • 이벤트 루프는 이벤트 큐(event queue)에서 이벤트를 받아와서 실행 스택이 비어있는 동안 실행하는 역할을 합니다. 이를 통해 비동기 작업(예: 타임아웃 함수, 이벤트 핸들러 등)을 처리할 수 있게 됩니다. 이렇게 함으로써 자바스크립트는 싱글 스레드로서도 비동기적인 작업을 처리할 수 있습니다.

  • 노드.js(Node.js)는 기본적으로 싱글 스레드(single-threaded)입니다. 이것은 자바스크립트 코드를 실행하는 메인 스레드가 하나뿐이라는 것을 의미합니다. 따라서 노드.js 애플리케이션은 주로 단일 호출 스택(single call stack)을 사용하여 코드를 실행합니다.

  • 그러나 노드.js는 싱글 스레드 모델에도 불구하고 I/O 작업과 같은 비동기(asyncronous) 작업을 지원합니다. (Node.js에서의 I/O 작업은 주로 파일 시스템 접근, 네트워크 통신, 데이터베이스 액세스 등과 관련이 있다.) 이를 통해 논블로킹(non-blocking) 방식으로 동작하여 이를 위해 이벤트 루프(event loop)와 콜백(callback) 함수를 활용합니다. 이를 통해 많은 수의 동시 요청을 효율적으로 처리할 수 있습니다.

  • 또한 최근 버전의 노드.js에서는 웹 워커(Web Workers)와 같은 기술을 사용하여 멀티 스레딩을 지원하기도 합니다. 웹 워커를 사용하면 추가적인 스레드를 생성하여 병렬로 작업을 처리할 수 있습니다. 하지만 이러한 멀티 스레딩은 일반적으로 노드.js의 주 메인 스레드와는 별도로 동작하므로, 기본적으로는 노드.js는 여전히 싱글 스레드 기반의 환경으로 간주됩니다.

    블로킹(Blocked)과 논 블로킹(Non-Blocking)은 주로 I/O 작업을 처리하는 방식에 관련된 용어입니다. 블로킹(Blocking)은 작업이 완료될 때까지 프로그램의 실행이 중지되는 상태를 의미합니다. 예를 들어, 파일을 읽는 동안 블로킹 작업이 발생하면, 프로그램은 파일 읽기가 완료될 때까지 다음 작업을 수행할 수 없습니다. 대기 시간 동안 CPU 자원이 낭비되는 단점이 있습니다.
    전통적인 동기적인 I/O 작업은 대부분 블로킹 방식으로 동작합니다.
    논 블로킹(Non-Blocking)은 작업이 완료되지 않아도 프로그램의 실행이 중단되지 않는 상태를 의미합니다. 비동기적인 논 블로킹 I/O 작업은 호출한 후에 바로 다음 코드를 실행하며, 작업이 완료되면 콜백 함수나 프로미스를 통해 결과를 처리합니다. 논 블로킹 방식은 대기 시간 동안 CPU를 유휴 상태로 만들지 않고 다른 작업을 수행할 수 있으므로, 시스템 자원을 효율적으로 활용할 수 있습니다. 논 블로킹 방식은 대부분의 현대적인 비동기적 프로그래밍 모델에서 사용되며, 특히 네트워크와 파일 시스템과 같은 I/O 작업에서 주로 사용됩니다. 이를 통해 프로그램은 여러 작업을 동시에 처리하고, I/O 작업이 완료될 때까지 기다리는 동안 다른 작업을 수행할 수 있습니다.

24. 멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.

멀티 스레드와 싱글 스레드는 프로그램이 동작하는 방식에 대한 중요한 차이가 있습니다. 아래에서 각각의 개념을 자세히 설명하겠습니다.

  1. 싱글 스레드 (Single-threaded):

    • 싱글 스레드는 단일 스레드를 사용하여 작업을 처리하는 모델입니다. 이는 프로그램이 동시에 하나의 작업만을 수행할 수 있다는 것을 의미합니다.
    • 자바스크립트와 같은 싱글 스레드 언어에서는 단일 호출 스택(single call stack)을 사용하여 코드를 실행하며, 한 번에 하나의 작업만을 처리합니다.
    • 싱글 스레드 모델에서는 작업이 순차적으로 진행되므로 동시성과 병렬성에 제한이 있습니다.
  2. 멀티 스레드 (Multi-threaded):

    • 멀티 스레드는 여러 개의 스레드를 사용하여 동시에 여러 작업을 처리하는 모델입니다. 각 스레드는 프로그램의 다른 부분을 병렬로 실행할 수 있습니다.
    • 멀티 스레드 환경에서는 각 스레드가 독립적으로 실행되며, 작업이 동시에 진행될 수 있습니다. 이는 프로그램의 성능과 응답성을 향상시킬 수 있습니다.
    • 멀티 스레드 모델에서는 동기화(synchronization)와 공유 자원에 대한 접근 제어 등의 추가적인 관리가 필요합니다.

주요 차이점:

  • 동작 방식: 싱글 스레드는 하나의 작업을 순차적으로 처리하고, 멀티 스레드는 여러 작업을 동시에 처리할 수 있습니다.
  • 성능: 멀티 스레드는 병렬 처리를 통해 성능을 향상시킬 수 있지만, 싱글 스레드는 하나의 스레드만 사용하기 때문에 병렬 처리가 제한됩니다.
  • 복잡성: 멀티 스레드는 동기화와 공유 자원 관리 등의 복잡한 작업이 필요하므로 개발 및 디버깅이 더 어려울 수 있습니다.
  • 자원 관리: 멀티 스레드는 여러 개의 스레드를 관리하므로 메모리 및 CPU 자원을 효율적으로 활용할 수 있습니다.

싱글 스레드는 단순하고 이해하기 쉽지만, 멀티 스레드는 병렬 처리를 통해 성능을 향상시킬 수 있으며, 여러 작업을 동시에 처리할 수 있는 장점이 있습니다. 그러나 멀티 스레드를 사용할 때는 동기화와 관련된 복잡성을 고려해야 합니다.

profile
황세민

0개의 댓글

관련 채용 정보