쓰레드 (Thread)

Woosung Kim·2022년 1월 12일
0

프로세스(Process) vs 쓰레드(Thread)

🐾 Process

  • 실행중인 프로그램
  • 운영체제로부터 자원을 할당받아 실행
  • 코드, 데이터, 스택, 힙 메모리 영역 공인

🐾 Thread

  • 프로세스의 독립적인 실행 단위
  • 프로세스 안에서 프로세스로부터 자원을 받아 실행
  • 프로세스의 코드, 데이터, 힙 메모리 영역 공유
  • 개별적인 스택, PC 등을 가짐

👉 쓰레드가 개별적인 스택을 가지는 이유

  • 스택에는 함수 호출 시의 전달인자, 지역 변수, 되돌아갈 주소 등을 저장
  • 독립적인 스택을 갖는 것은 독립적인 함수 호출이 가능하고 독립적인 실행 흐름을 추가할 수 있다는 것을 의미

👉 쓰레드마다 독립적인 PC 레지스터를 가지는 이유

  • 쓰레드는 CPU를 할당받고, 반납하고를 반복
  • 이전까지의 수행 내역을 기억하기 위해 독립적인 PC 사용

👉 쓰레드가 fork와 비교하여 가지는 장점

  • copy를 하지 않기 때문에 사이즈가 작다.
  • 전역 변수를 공유하기 때문에 그 자체로 프로그램을 유용하게 쓸 수 있다.

멀티 프로세싱 (Multi-Processing) vs 멀티 쓰레딩 (Multi-Threading)

🐾 멀티 프로세싱

  • 다수의 프로세서(CPU)가 여러 작업을 동시에 처리하는 것 (병렬 처리)
  • Pipe나 Shared Memory가 있어야 데이터를 주고 받을 수 있음
  • 많은 메모리 공간을 차지
  • IPC라는 별도 매커니즘을 사용
  • 프로세스 간의 통신 비용/문맥 교환 비용이 큼
  • 안전성: 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행

✏️ IPC (Inter Process Communication)
프로세스 간의 통신을 하는 것으로 pipe, 공유 메모리(shared memory, shmem), 소켓 등을 통해서 구현

👉 멀티 프로세스의 문제점

  • 메모리 영역을 duplicate 함으로써 메모리 공간을 낭비하게 되고, 데이터를 공유하지 않음으로써 우수한 소프트웨어를 구현하기 어렵다.

🐾 멀티 쓰레딩

  • 하나의 프로세스에 여러 쓰레드로 자원을 공유하며 작업을 나누어 수행하는 것
  • 쓰레드 간은 데이터/힙 영역을 공유하므로 Shared Memory가 없어도 데이터를 주고 받을 수 있음
  • 적은 메모리 공간을 차지
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로서 자원을 효율적으로 관리
  • 쓰레드 간의 통신 비용과 문맥 교환 비용이 적음
  • 하나의 쓰레드의 비정상적인 활동은 전체 쓰레드에 영향을 끼칠 수 있음

👉 멀티 쓰레드의 장점

  • 프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이 더욱 효율적이다.
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
  • Context Switching시, 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠르다.
    -> 쓰레드는 Stack 영역만 초기화하면 되기 때문에
  • 쓰레드는 프로세스 내의 메모리를 공유하기 때문에 데이터 전달이 간단하므로 IPC에 비해 비용이 적고 더 빠르다.
    -> 쓰레드는 프로세스의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에

👉 멀티 쓰레드의 단점

  • 자원 공유로 인한 동기화 문제
profile
개발하는 강아지

0개의 댓글