[멀티스레드와 동시성] 프로세스와 스레드 소개

멀티태스킹 vs 멀티프로세싱

  • 멀티태스킹:

    • 단일 CPU 코어가 여러 작업을 빠르게 전환하며 수행 → 동시에 실행되는 것처럼 보임 (시분할 방식)
    • 운영체제 수준의 소프트웨어 기술
    • 예시) CPU가 음악 재생을 하다가 0.01초 단위로 워드 작업도 번갈아 수행 → 두 작업이 동시에 되는 것처럼 보임
  • 멀티프로세싱:

    • 다수의 CPU 코어를 이용해 실제 여러 작업을 동시에 실행
    • 하드웨어 기반 병렬 처리
    • 예시) CPU 코어 1이 음악을 재생하고, 코어 2가 워드 편집 실행 → 진짜 병렬 실행

프로세스 vs 스레드

img.png

  • 프로세스:

    • 실행 중인 프로그램 인스턴스
    • 독립된 메모리 공간 가짐 → 서로 간섭 없음
    • 충돌 시 다른 프로세스에 영향 없음
    • 예시) 게임 실행 중 게임이 멈춰도, 별개 프로세스인 음악 프로그램은 계속 정상적으로 재생됨
  • 스레드:

    • 프로세스 내 실행 흐름 단위
    • 코드, 힙, 전역변수 등은 공유, 스택은 개별 보유
    • 프로세스 안에서 여러 작업을 병렬 처리할 수 있음
    • 예시) 워드 프로그램 내부에서 문서 편집(스레드1), 자동 저장(스레드2), 맞춤법 검사(스레드3) 등을 동시에 실행

스케줄링

  • **운영체제(OS)**가 어떤 스레드에 CPU를 할당할지 결정
  • 단일 코어에서는 순차적으로 스레드 실행
    • 예시) CPU가 영상 스트리밍 스레드 → 댓글 작성 스레드 → 다시 영상 스레드로 순환
  • 멀티 코어에서는 진짜 병렬 실행 가능
    • 예시) CPU 코어 1이 영상 스트리밍, 코어 2가 댓글 작성 스레드 처리 → 병렬 실행

컨텍스트 스위칭

  • 스레드를 교체할 때 현재 상태(레지스터, 변수 등)를 저장하고 복구하는 과정
  • 비용 발생 (짧지만 반복되면 누적되어 성능 저하)
  • 예시) 게임 중 계산 스레드를 멈추고 채팅 스레드로 전환. 전환 시 레지스터, 변수 등을 저장/복구해야 함

CPU-바운드 vs I/O-바운드 작업

  • CPU-바운드: 계산 중심 → 코어 수 + 1개 정도의 스레드 적절
  • I/O-바운드: 대기 시간 많음 → 코어 수보다 더 많은 스레드 필요
  • 실무에서는 대부분 I/O-바운드가 많음 (예: 웹 서버)
  • Tip) 네트워크, DB, 파일 등 입출력 대기가 많은 웹 서버는 입출력 대기가 많아서 코어수보다 많은 스레드를 할당하는게 효율적

© 2023 Lee. All rights reserved.