CS

프로세스부터 멀티 스레드까지

YunH2 2023. 7. 6. 02:23

프로그램

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

프로세스

  • 컴퓨터에서 실행 중인프로그램
  • 각각의 프로세스는 독립된 메모리 공강을 할당 받음

CPU(central processing unit)

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

메인 메모리

- 프로세스가 CPU에서 실행되기 위해 대기하는 곳


단일 프로세스 시스템

  • 한 번에 하나의 프로그램만 실행
  • CPU사용률이 좋지 않음 
  • ex) P1이라는 프로세스가 실행 중일때 P1이 I/O 작업을 하는 동안은 CPU가 놀게된다

해결책! -> 멀티 프로그래밍이 탄생

멀티 프로그래밍

  • CPU 사용률을 극대화 시키는 것이 목적
  • 여러 개의 프로그램을 동시에 실행
  • 실행중인 프로세스에서 I/O작업이 발생하면 다른 프로세스가 CPU에서 실행 반복
  • 단점 : CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기하게 된다

해결책! -> 멀티 태스킹이 탄생!

멀티 태스킹

  • 프로세스의 응답 시간을 최소화 시키는 것이 목적 (마치 여러 프로그램이 동시에 실행되는 것 처럼)
  • 프로세스가 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 실행되고 다른 프로세스 실행 반복

스레드가 등장 하면서 개념이 확장

- 여러 프로세스와 여러 스레드가 아주 짧게 쪼게진 cpu time을 나눠 갖는 것

 

아쉬움

1. 하나의 프로세스가 동시에 여러 작업을 수행 하지는 못함

2. 프로세스의 컨텍스트 스위칭은 무거운 작업

3. 프로세스끼리 데이터 공유가 까다로움

 

해결책! -> 스레드

스레드

  • 프로세스는 한 개 이상의 스레드를 가질 수 있다
  • CPU에서 실행되는 단위 ( 프로세스는 기본적으로 하나의 스레드를 가짐 )
  • 같은 프로세스의 스레드들끼리는 컨텍스트 스위칭이 가볍다
  • 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유한다 (데이터 공유가 쉽다!)

멀티 스레딩

  • 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적

- Heap영역 공유

- Stack영역은 각각의 영역

- Program counter : 다음번에 실행 되어야될 명령어가 있는 메모리 주소

듀얼 코어 이상을 가진 CPU일 경우 스레드는 각각의 코어에서 동시 실행이 된다!

 

멀티 프로세싱

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

 

 

참고 : 쉬운코드 https://www.youtube.com/watch?v=QmtYKZC0lMU