본문 바로가기
  • 시 쓰는 개발자
CS 개념 (~24년 7월)/운영체제

프로세스 vs 쓰레드

by poetDeveloper 2024. 7. 15.

선 요약

프로세스 = 독립적인 실행공간, 쓰레드 = 스택만 독립적이고 나머지는 공유

 

프로세스 = "프로그램"의 인스턴스 (= HDD에서 메모리로 올라온 프로그램을 의미)

  • 독립적인 실행 환경(자신만의 주소 공간)을 할당받는다.
  • 여기서 말하는 환경은 Code, Data, Stack, Heap을 의미한다. 즉, 각 프로세스별로 이 4개를 독립적으로 가짐.
  • 프로세스간 메모리 독립적이라서 서로 영향을 주지 않아 다른 프로세스의 변수에 접근 불가능.
  • 만약 프로세스간의 통신을 해야한다면 IPC(Inter Process Communication)를 이용해야한다.

쓰레드 = 프로세스 내에서 실행하는 작은 실행단위 (= 프로세스 내의 물줄기들)

  • 가장 큰 차이는, 리소스 공유 여부이다. 프로세스는 리소스를 공유하지 않고 만약 공유해야한다면 IPC를 사용한다.
  • 그러나 쓰레드는 프로세스의 리소스를 공유한다. 왜냐하면 쓰레드는 Stack만 독립적으로 가지고 있고, Code, Data, Heap은 공유하기 때문이다.
  • 이런 구조는 Context Switching이 빠르고 효율적이지만, 공유 데이터 관련 동기화 문제가 있다. → 동기화 문제는 Mutex, Semaphore, CS등으로 관리할 수 있다. 그러나 이 해결법은 데이터는 안전하게 공유하지만, 성능 저하의 문제가 될 수 있고, 데드락이나 일관성문제(race condition) 등이 생길 수 있다.
  • 예를 들어, 웹 서버는 하나의 프로세스로 실행되고 여러 스레드를 사용함으로써 동시에 여러 클라이언트의 요청을 처리할 수 있다.
  • 각 스레드는 동일한 메모리 공간(웹 페이지, 사용자 데이터 등)에 접근할 수 있지만, 사용자별 세션 정보 같은 특정 데이터는 각각의 스레드에 의해 독립적으로 관리된다.
반응형

'CS 개념 (~24년 7월) > 운영체제' 카테고리의 다른 글

I/O 시나리오, Interrupt  (1) 2024.04.03
Scheduler, I/O 시나리오 개요  (0) 2024.03.28
RAM, ROM, Booting  (0) 2024.03.28
CPU Instruction Cycle, Interrupt 개요  (1) 2024.03.25
CPU 레지스터  (2) 2024.03.22