Process, Thread

강현구·2022년 4월 12일
0

한줄 정리:

  • 프로그램 : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라와 있지 않는 정적인 상태
  • 프로세스 : 메모리에 올라와 실행되고 있는 프로그램
  • 스레드 : 한 프로세스 내에서 동작되는 여러 실행의 흐름

Process & Thread

프로그램과 프로세스

이 프로그램 자체는 실행하기 전에는 코드로 구현한 파일일 뿐이다.
프로그램을 실행되어 사용할 수 있는 무언가가 되는데,
이것이 바로 프로세스이다.

프로그램이 프로세스가 될 때는,

  1. 프로세스가 필요로 하는 리소스가 메모리에 올라가야한다.
    • Code : 실행 명령을 포함하는 코드들
    • Data : Static 변수 혹은 Global 변수
    • Heap : 동적 메모리 영역
    • Stack : 지역변수, 매개변수, 반환 값 등등 일시적인 데이터
  2. 프로세스에 대한 정보를 담고있는 PCB 블럭이 생성된다.

보통 컴퓨터를 사용할 때는, 동시에

여러가지 프로세스를 사용하고자 한다. (크롬, 카카오톡, 슬랙, vscode, 유튜브 ....등등)
원래 한 프로세스가 실행되기위해서 CPU를 점유하면 다른 프로세스는 실행상태에 있을 수 없다.
즉, 한번에 한 프로세스만 실행가능하다.
하지만 동시에 여러 프로세스를 사용하기 위해서 짧은 텀을 반복하면서 전환하면서 프로세스를 실행하도록한다.
== 마치 여러개의 그림을 붙여 애니메이션을 만들 듯 == 컨텍스트 스위칭

  • 2개의 프로세스가 컨텍스트 스위칭되는 예시

이 컨텐스트 스위칭은 상당히 부하가 많이 들어가는 작업이다.
이에 경량화된 프로세스 버전인 스레드가 등장하게 된다.
경량화? = 하나의 프로세스 안에 다수의 쓰레드가 있을 때, 공유되는 자원이 존재한다. (효율적인 실행)
공유되는 자원이 있기 때문에 컨텍스트 스위칭이 일어날 때, 캐싱 적중률이 올라간다.
즉, 모조리 다 빼고 다시 넣을 필요가 없다.

ex) 회의실 사용
프로세스의 컨텍스트 스위칭:
사용하는 사용자마다 TV, 스피커, 의자 등등 필요한 물품을 각자가 알아서 다 챙겨서 들어오고 가지고 나간다.
스레드의 컨텍스트 스위칭:
사용자는 개인 물품만 가지고 들어오고 필요한 공용 기자재들은 회의실 내부에 구비되어 있다.

프로세스와 스레드를 다음과 같이 정의할 수 있다.

프로세스스레드
1. 운영체제로부터 자원을 할당받은 작업의 단위.
2. 컴퓨터에서 연속적으로 실행되고 있는 프로그램
3. 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스
1. 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
2. 하나의 프로세스에 자원을 공유하며,
일련의 과정을 여러개 동시에 실행시킬 수 있도록 하는 것.

Multi-process vs. Multi-thread

한 애플리케이션에 대한 두가지 다른 처리방식!

ex) 여러 사용자의 로그인 요청

  • Multi-process
    한 프로세스는 매번 하나의 로그인만 처리한다. = 동시에 로그인 처리 불가
    따라서 부모 프로세스가 fork()를 해서 자식프로세스를 통해 일을 처리하도록 한다.
    이때, 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 된다.

  • Multi-thread
    스레드는 한 프로세스 내에서 구분지어진 실행 단위로,
    프로세스 내에서 분리해서 여러 스레드로 실행된다면 그것이 바로 멀티스레드이다.
    예를 들어 vscode로 코드를 작성하는 동시에 자동 완성기능이나 맞춤법 확인을 해주는 것처럼
    한 애플리케이션에서 작업의 단위가 나누어지는 경우가 많은데, 이때 각각의 스레드가 그 작업들을 분담해서 담당한다.

위의 특징점을 봤을 경우에는 멀티스레드의 장점이 훨씬 많고 좋아보이는데, 멀티 프로세스를 왜 사용할까?

ex) 예전 인터넷 익스플로러를 사용하다가 오류가 발생할 경우에는 창 전체가 꺼지게된다.
(=멀티스레드; 작업이 긴밀하게 연결되어 있어 한탭의 문제가 전체 프로세스에 영향을 준다.)
반면, 구글 크롬은 멀티프로세서를 이용하기 때문에 한개의 탭에 영향이 생겨도 전체 창 전체가 다 꺼지는 경우는 잘 없다.

Multi-core

멀티코어는 멀티프로세스와 멀티스레드와는 조금 다른 관점으로 봐야한다.
멀티프로세스, 멀티스레드는 처리방식의 일종으로 소프트웨어적인 방법이고
멀티코어는 하드웨어의 측면에 가까운 것!

  • 동시성
    싱글 코어를 가진 CPU가 실행단위를 처리할 때는 동시에 여러가가 진행되기 위해서 빠른 텀으로 전환되면서 실행된다.
    (=컨텍스트 스위칭)
    짧은 순간에 CPU를 시분할하여, 동시에 작업하는 것처럼 보이게 하는 것.
  • 병렬처리
    물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순간에 처리할 수 있게 해준다.
    한꺼번에 두개의 코어에서 각각의 실행단위가 진행될 수 있다.
    다수의 프로세서로 여러가지 일을 각 코어에서 진행한다.
profile
한걸음씩

0개의 댓글