프로세스와 스레드 (멀티 스레딩, 멀티 프로세싱)

사전 지식

프로그램

  • 컴퓨터가 실행할 수 있는 명령어들의 집합

프로세스

  • 컴퓨터에서 실행 중인 프로그램을 의미
  • 각각의 프로세스는 독립된 메모리 공간을 할당 받는다.
  • 명령어들과 데이터를 가짐

CPU(Central Processing Unit)

  • 명령어를 실행하는 연산 장치

메인 메모리

  • 프로세스가 CPU에서 실행되기 위해 대기하는 공간

I/O(Input/Output)

  • 파일을 읽고 쓰는 행동
  • 네트워크와 데이터를 주고 받는 것
  • 입출력 장치와 데이터를 주고 받는 것

 

프로세스

단일 프로세스 시스템

 

  • 컴퓨터의 역사에서 초창기에는 단일 프로세스 시스템
  • 한 번에 하나의 프로그램만 실행
  • 단점: 실행 중에 있는 프로세스가 I/O작업 동안에는 CPU는 아무것도 하지 않음 → CPU 사용률이 좋지 않음

멀티 프로그래밍 시스템

 

  • CPU 사용률을 극대화 시키는 데 목적
  • 여러 개의 프로그램을 메모리에 대기시켜놓고 동시에 실행시키는 시스템
  • I/O 작업이 발생하면 다른 프로세스가 CPU에서 번갈아가면서 실행됨
  • 단점: CPU 사용 시간이 길어지면, 다른 프로세스는 계속 대기해야함

멀티 태스킹

 

  • 프로세스의 응답 시간을 최소화 시키는 데 목적
  • 멀티 프로그래밍과 비슷하지만, CPU 타임을 아주 짧게 쪼개서 서로 다른 프로세스들이 번갈아 가면서 실행될 수 있다는 것이 차이
  • 번갈아 가면서 실행되는 속도가 매우 짧아서 마치 동시에 실행되는 효과를 볼 수 있음
  • 단점: 하나의 프로세스가 동시에 여러 작업을 수행하지 못 함

프로세스를 여러 개 만들어서 동작시키는 것이 힘든 이유

  • 프로세스의 컨텍스트 스위칭(Context Switching)은 무거운 작업
    *컨텍스트 스위칭: CPU에서 어느 한 프로세스에서 다른 프로세스로 교체 되는 것
  • 프로세스는 각각 독립적인 메모리 공간을 차지하고 있어서, 프로세스끼리 데이터 공유가 어려움
  • 듀얼 코어의 등장으로 스레드라는 개념이 필요하게 됨

 

스레드

  • 프로세스는 한 개 이상의 스레드를 가질 수 있음
  • CPU에서 실행되는 단위(Unit Of Execution)
  • 같은 프로세스의 스레드들끼리 Context Switching은 가벼운 작업
  • 프로세스의 스레드들은 해당 프로세스의 메모리 영역을 공유할 수 있음
    • 각 스레드들은 메모리 영역에서 스택 및 프로그램 카운터는 고유한 영역으로 치부됨
      *프로그램 카운터: 다음번에 실행되어야 할 명령어가 있는 메모리 주소를 가르키는 것

멀티 스레딩

  • 하나의 프로세스가 동시에 여러 작업을 실행하는 것
  • 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 CPU Time을 나눠 갖는 것

멀티 프로세싱

 

  • 두 개 이상의 프로세서나 코어를 활용하는 시스템