Process / Thread

📝 1yangsh·2022년 4월 3일
0

키워드

  • 실행 단위
    • cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
  • 프로세스
    • 하나의 스레드만 가지고 있는 단일 스레드 프로세스
  • 동시성
    • 한 순간에 여러가지 일이 아니라 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것

Process

프로세스는,
프로그램이 실행된 형태를 말합니다.

프로세스가 실행되려면 필요한 리소스들이 메모리에 올라가야 합니다.

또한 해당 프로세스에 대한 정보를 담고 있는 PCB block이 프로세스 생성 시 함께 만들어집니다.

우리는 여러개의 프로그램을 동시에 사용합니다. (노래, IDE, 메신저 앱 등)
하지만 프로세스가 실행 상태에 있다면 다른 프로세스는 실행 상태에 있을 수가 없습니다.
따라서 다수의 프로세스를 동시에 실행하기 위해 여러 개 프로세스를 시분할로, 즉 짧은 텀을 반복하면서 전환하면서 실행을 시킵니다.

따라서 프로세스들이 반복적으로 CPU를 점유하면서 실행상태, 준비상태를 반복하게 되는데 이를
context switching 이라고 합니다.

하지만 프로세스가 많아진다면

  • 컨텍스트 스위칭의 복잡도도 올라가게 됩니다.
  • 또한 컨텍스트 스위칭이 많이 발생하게 된다면 CPU가 정보를 가지고 오는 기간에는 아무런 작업
    을 할 수 없기 때문에 CPU의 오버헤드가 발생할 수 있습니다.

따라서 경량화된 프로세스 버전인 스레드가 등장하게 됩니다.

Thread

스레드가 경량화된 프로세스라고 불리는 이유는
하나의 프로세스 안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문입니다.

프로세스의 메모리 구조에는

  • Code 영역
  • Data 영역
  • Heap 영역
  • Stack 영역
    이렇게 네 가지가 있는데 스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용합니다.
    각 스레드는 스택 부분만 따로 가지고 있는 것입니다.
    공유되는 자원이 있기 때문에 컨텍스트 스위칭이 이러날 때 캐싱 적중률이 올라가게 됩니다.

쉽게 말하자면,
실행 상태로 변경될 때 CPU가 점유하는 모든 메모리를 다 지우고 다시 적재할 필요가 없다는 것 입니다.

Multi-process & Multi-thread

멀티프로세스와 멀티스레드 이 두 가지의 개념 모두 처리방식의 일종입니다.
한 어플리케이션에 대한 다른 처리방식이라고 생각하면 쉽습니다.

한 어플리케이션이 여러가지 일을 처리해야 하는 경우가 있습니다.
예를 들어,
여러 사용자가 로그인을 하는 경우에는 프로세스는 한번에 하나의 로그인만 처리할 수 있기 때문에
부모 프로세스가 fork()를 해서 자식 프로세스가 일을 처리하도록 하게 합니다.
이때 자식 프로세스는 부모 프로세스와 별개 메모리 영역을 확보하게 됩니다.

자원을 공유하며 컨텍스트 스위칭 비용이 덜 들고 메모리의 효율이 멀티프로세스보다 멀티스레드가 좋지만 왜 멀티프로세스를 사용하는 것일까요?

멀티스레드의 경우에는 프로세스내 공유되는 메모리 영역이 있기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향이 가게 됩니다.

Multi-core

멀티프로세스, 멀티스레드는 처리방식의 일종이기 때문에 소프트웨어적 측면에 가깝고,
멀티코어의 경우는 하드웨어적 측면에 가깝습니다.

멀티코어와 관련된 키워드는 동시성과 병렬처리 입니다.

  • 동시성

    • 여러 실행 단위를 번갈아 실행하면서 동시에 일어나는 것처럼 보이게 하는 것
    • 짧은 순간에 cpu의 시간을 분할해서 동시에 하는 것 처럼 보이게 하는 것
  • 멀티코어

    • 물리적으로 여러 코어를 사용하여 다수의 실행단위를 한순간에 동시에 처리할 수 있게 하는 것

참고

profile
개발 경험 저장소

0개의 댓글