미새문지

크래프톤 정글 week04, day29 - 프로세스, 쓰레드 본문

크래프톤 정글/TIL

크래프톤 정글 week04, day29 - 프로세스, 쓰레드

문미새 2024. 2. 20. 12:59
728x90

프로세스(Process)

  • 운영체제에서 실행 중인 프로그램의 인스턴스
  • 프로세스는 각각 독립된 메모리 영역을 가지고 있고, 다른 프로세스와 격리되어 있다.
    • 이 메모리 공간은 일반적으로 코드 섹션, 데이터 섹션, 스택 섹션 세 가지로 구분되어 있으며 힙 영역이라는 동적 메모리 할당 영역도 존재한다.
      • 코드 섹션
        • 프로세스가 실행할 프로그램 코드를 저장한다. 이 영역은 읽기 전용이며, 프로세스가 실행되는 동안 변경되지 않는다.
      • 데이터 섹션
        • 프로세스의 전역 변수와 정적 변수를 저장한다. 이 영역은 프로세스가 실행되는 동안 값이 변경될 수 있다
      • 스택 섹션
        • 함수 호출과 관련된 정보(지역변수, 반환주소 등)를 저장한다. 함수 호출이 발생할 때마다 스택 프레임이 생성되고, 함수 호출이 완료되면 스택 프레임이 제거된다.
  • 각 프로세스는 프로그램 카운터(PC), 프로세스 상태, CPU 레지스터 값 등의 프로세스 메타데이터도 포함한다.
    • 프로세스는 CPU 시간을 공유하며, 운영체제의 스케줄러에 의해 제어된다.

쓰레드(Thread)

  • 프로세스 내에서 독립적으로 동작하며, 각각 자신만의 레지스터 세트와 스택을 가진다.
    • 그러나 프로세스의 코드, 데이터 섹션 등의 자원은 다른 쓰레드와 공유한다.
  • 프로세스가 독립된 실행 환경을 제공하는 반면, 쓰레드는 프로세스의 자원을 공유하면서 병렬처리를 가능하게 한다.
    • 이로 인해 쓰레드는 프로세스보다 생성과 제거, 컨텍스트 스위칭이 빠르며 쓰레드 간의 통신도 더 효율적이다.
    • 이런 특징들 때문에 멀티쓰레드 프로그래밍은 고성능의 컴퓨팅을 가능하게 한다.
  • 멀티쓰레드 프로그래밍
    • 여러 쓰레드를 동시에 실행하여 프로그램의 효율성과 성능을 향상시킨다
    • 장점
      • 향상된 성능 : 멀티코어 또는 다중 CPU 시스템에서는 여러 쓰레드가 동시에 다른 코어에서 실행될 수 있기 때문에 프로세스의 실행 시간을 크게 줄일 수 있다.
      • 자원 공유 : 같은 프로세스 내의 쓰레드들은 메모리와 같은 자원을 공유할 수 있기 때문에 쓰레드 간의 통신이 더욱 쉽고 빠르게 이루어진다.
      • 응답성 향상 : 만약 하나의 쓰레드가 블록(blocked) 상태에 빠지거나 계산에 많은 시간이 소요된다 하더라도, 다른 쓰레드들은 계속해서 작업을 수행할 수 있다.
    • 단점
      • 동기화 문제 : 여러 쓰레드가 동시에 같은 자원에 접근하려고 할 때 발생하며 뮤텍스(Mutex), 세마포어(semaphore)같은 동기화 기법을 사용해야 한다.
      • 데드락(Deadlock) : 두 개 이상의 쓰레드가 서로 끝나기를 기다리며 진행을 멈추는 상황. 이는 시스템 자원을 효율적으로 사용하지 못하게 되며 프로그램의 실행을 완전히 멈추게 할 수 있다.
      • 오버헤드 : 쓰레드를 생성하고, 제거하고, 스위칭하는 것은 자원과 시간을 소모하는데, 쓰레드가 너무 많으면 오버헤드가 발생해 프로그램의 전체 성능을 저하시킬 수 있다.

외에는 AVL트리와 RB트리인데 아직 코드도 다 못짰고 개념도 정리중이라 오늘 TIL은 쓸 게 별로 없는 것 같다.

학습 시간 : 10 ~ 26시

728x90