[CS]Process vs Thread

말하는 감자·2025년 1월 8일
post-thumbnail

정의

프로세스

  • 실행중인 프로그램의 인스턴스.
  • 각각의 프로세스는 독립적이며 서로의 메모리 공간에 직접 접근할 수 없기에 프로세스간의 통신은 IPC를 통해 이루어진다.
  • 코드 + data + Heap + Stack
    • data: static 변수 혹은 global 변수
    • Heap: 동적 메모리 영역
    • Stack: 지역변수 매개변수 반환 값 등 일시적인 데이터

스레드

  • 스레드는 프로세 내에서 실행되는 작업 단위.
  • 한 프로세스는 여러 스레드를 가질 수 있으며(멀티스레드) 각 스레드는 같은 프로세스 내의 메모리 공간을 공유한다.

Context Switching

사용자 관점에서 여러 프로그램이 동시에 돌아가는 것 처럼 보이지만 이는 실제로 동시에 돌아가는 것이 아닌 시분할을 통하여 동시에 돌아가는 것 처럼 보일 뿐이다.

프로세스

프로세스 기반의 컨텍스트 스위칭은 현재 실행중인 프로세스의 상태를 PCB에 저장하고 다음 실행될 프로세스의 상태를 복원하는 작업이다.
따라서 CPU와 PCB가 상태 정보를 저장하는 과정에서 오버헤드가 발생하고, 메모리가 독립적이기 때문에 모든 데이터를 설정해야 하므로 더 많은 시간과 비용이 소모

스레드

스레드 기반의 컨텍스트 스위칭은 같은 프로세스 내의 여러 스레드 간에 실행을 전환하는 과정이다.
스레드는 프로세스의 메모리를 공유하므로, 스위칭 시 상대적으로 적은 양의 데이터만 저장하고 복원하므로 비용과 시간적 측면에서 유리하다.

Multi-Process vs Multi-Thread

컨텍스트 스위칭을 통하여 동시에 여러 작업을 수행하는 기술

멀티프로세스

  • 부모 프로세스로부터 fork()를 통하여 생성된 자식 프로세스는 독립적인 메모리 공간을 할당받는다.
  • 하나의 프로세스가 충돌하더라도 다른 프로세스에 영향을 주지 않기 때문에 안정성이 높고 메모리 오류나 자원 충돌위험이 적다
  • 컨텍스트 스위칭 과정에서 생기는 단점을 그대로 가져옴(더 많은 비용,많은 자원 필요, 더 많은 시간 소모)

멀티스레드

  • 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 방식으로 같은 프로세스 내의 스레드는 메모리와 자원을 공유하며 스레드 간의 데이터 전송 및 통신이 더 간편
  • 사용자의 관점에서는 각각의 스레드가 작업단위가 된다.
  • 컨텍스트 스위칭이 빠르고 자원소모 측면에서 유리하다
  • 같은 프로세스 내에서 작동하기 때문에, 하나의 스레드에서 발생한 오류가 다른 스레드에게 영향을 주기 때문에 안정성이 낮고, 자원을 공유하기 때문에 자원 경쟁을 해결해야 한다.

Multi-Core(멀티 코어)

정의

멀티 프로세스와 멀티 스레드가 소프트웨어적 측면에서 여러 작업을 처리하는것이라면, 멀티 코어는 하드웨어 측면에서 병렬작업을 통하여 여러 작업을 처리하는 것이다.
시분할 방식을 사용하는 멀티프로세스와 멀티스레드와 달리 멀티코어는 하나의 CPU에 여러 프로세스 코어가 통합되어 말그대로 동시에 여러 작업을 처리한다.

특징

  1. 병렬 처리: 각각의 코어가 독립적으로 실행됨으로써 여러 프로세스 또는 스레드가 동시에 실행 가능하다.
  2. 성능 향상: 병렬처리를 통하여 작업 속도 향상
  3. 전력효율
  4. 스케일링: 코어 숫자를 늘림으로써 성능을 확장 가능하다.
profile
주니어개발자(?)

0개의 댓글