항목 정의 및 특히
동시성 정의: 동시성은 하나의 CPU에서 여러 작업(프로세스 또는 스레드)이 동시에 실행되는 것처럼 보이게 하는 개념

1️⃣ 동시성과 병렬성의 차이 (멀티 쓰레드 환경에서의 동시성과 병렬성)

  1. 싱글코어 일때는, 동시성으로 인해 여러 쓰레드가 실행되지만, 실제로는 하나의 코어에서 번갈아 가며 실행된다.
  2. 멀티코어 일때는, 일부 스레드는 같은 코어에서 동시성으로 번갈아 가며 실행되고, 일부는 다른 코어에서 병렬성으로 동시에 실행된다.

2️⃣ 텍스트 스위칭이 발생할 때 생기는 부정적인 영향

  1. 컨텍스트 스위칭이 많아질수록 CPU가 실제 연산보다는 문맥 전환 자체에 시간을 소비
  2. 과도한 컨텍스트 스위칭은 시스템의 전체적인 응답 속도를 저하

3️⃣ 스레드풀을 사용하는 이유와 장단점에 대해서 설명해주세요

  1. 스레드풀은 미리 생성된 일정 개수의 스레드를 관리하는 풀로 작업(Task)이 발생하면 새로운 스레드를 생성하는 대신 기존의 스레드를 재사용하고 작업이 끝나면 스레드는 종료되지 않고 풀에 반환되어 새로운 작업을 기다린다.
  2. 장점:
    1. 스레드를 생성할 때는 메모리 할당, 스택 공간 확보, OS 리소스 등록 등 비용이 많이 발생하는 것을 방지
    2. 너무 많은 스레드가 생성되면 CPU가 문맥 전환(Context Switching)을 자주 수행해야 하므로 성능이 저하를 스레드 풀로 스레드의 개수 제한하면 해결 가능
  3. 단점:
    1. 스레드풀의 크기가 너무 작으면 요청이 많아질 때 새로운 작업이 대기 상태가 될 수 있다
    2. 스레드풀을 사용하더라도 너무 큰 풀을 사용하면 스레드 관리(Idle 상태 유지, 작업 분배 등)에 대한 오버헤드가 발생할 수 있다.
    3. 스레드풀을 사용하면 멀티쓰레딩 환경에서 발생하는 동기화 문제(레이스 컨디션, 데드락 등)를 추적하기 어려움.

4️⃣ 프로세스 스케쥴링과 스레드 스케쥴링의 차이점

프로세스는 실행 중인 프로그램의 인스턴스로 각 프로세스는 독립적인 메모리 공간(코드, 데이터, 스택, 힙)을 가진다. 스레드는 프로세스 내에서 실행되는 작업 단위로 같은 프로세스 내에서 코드, 데이터, 힙 영역을 공유하지만, 개별적인 스택을 가진다.

컨텍스트 스위칭 비용 측면에서는 프로세스 간 문맥 전환은 독립적인 주소 공간을 변경해야 하므로 비용이 높지만 스레드는 같은 프로세스 내에서 실행되므로 문맥 전환 비용이 상대적으로 낮다.

실행 단위로는 프로세스는 독립적으로 실행되고, 스레드는 프로세스 내에서 병렬로 실행될 수 있다.