본문으로 바로가기

프로세스, 스레드

category Computer Science 2021. 6. 21. 14:08

출처:https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

 

Process와 Thread 이야기

프로세스(Process)

charlezz.medium.com

프로세스

프로그램이 실행시킬 때 만들어지는 프로그램의 인스턴스를 프로세스라고 부른다

그렇다면 인스턴스는 무엇일까?

프로그램이 실행될 때 실행에 필요한 내용이 컴퓨터 메모리(RAM)에 올라가는 것이 인스턴스이다

이렇게 메모리에 올라가서 CPU에서 필요한 자원을 할당받아 실행시키고 있는 상태를 프로세스라고 부른다

쉽게 예를 들면

프로그램들에는 우리가 자주 실행하는 카카오톡, 크롬, 뮤직 플레이어, ide 등이 있으며

보통 많은 프로그램들 실행시켜놓고 동시에 작업을 한다

여기서 동시에 라고 했지만 사실 CPU는 한 번에 하나의 TASK밖에 처리하지 못한다

그럼 어떻게 우리는 프로그램들을 동시에 작업할 수 있는 것일까?

여기서 동시에 라는 뜻은 한 순간에 모든 프로그램들이 실행되는 것이 아니다

CPU가 아주 빠른 속도로 프로세스들을 번갈아가면서 실행하며 관리하는 것이 우리가 느끼기에는 동시처럼 보이는 것

이러한 전환들을 Context Switching이라고 부른다

Context Switching

Context Switching이란 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업

이 컨텍스트 스위칭을 하기 위해 필요한 정보들을 담아 놓는 곳을 PCB(Process Control Block)이라고 부르는데 운영체제 쪽에서 관리한다

이 PCB에는 프로세스의 아이디, 현재 상태, 우선 순위 등 다양한 정보가 저장되어있고

다음 프로세스가 실행되어야할 때 현재 실행되고 있는 프로세스의 정보를 PCB에 저장한다

스레드

스레드는 프로세스 내에서 실행 단위를 말한다

일반적으로 프로그램을 실행시키면 하나의(또는 그 이상) 프로세스가 생성되고 프로세스 안에는 하나의(또는 그 이상) 스레드가 생성된다

이 과정에서 프로세스는 실행될 때 운영체제로 부터 독립된 메모리 영역을 부여 받게 되고 스레드들은 그 프로세스 내부에서 주소 공간이나 자원들을 공유한다

멀티 프로세스

프로그램을 실행시킬 때 두 개 이상의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것

특징은 다음과 같다

  • 안정성이 좋다 여러 개의 자식 프로세스 중 하나에 문제가 생겨도 다른 자식 프로세스에 영향을 주지않는다
  • 각 프로세스들이 독립적으로 작용하며 자원을 공유하지 않는다
  • 메모리 사용량이 많다
  • Context Switching이 많아지며 성능이 저하될 수 있다

멀티 스레드

프로그램을 실행시킬 때 두 개 이상의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것

주로 사용자와 상호작용하는 프로그램에서 통신이나 DB와 같은 긴 작업을 처리하는 동안 유저와 상호작용에 지장을 주지 않기 위해 사용한다

  • 응답성이 좋다 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 적으로 수행된다
  • 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있기 때문에 자원 공유가 쉽다
  • 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다 컨텍스트 스위칭이 빠름
  • 구현 및 테스트, 디버깅이 어렵다
  • 너무 많은 스레드 사용은 오버헤드를 발생시킨다
  • 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다
  • 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다

 

'Computer Science' 카테고리의 다른 글

OSI 7 계층  (0) 2021.06.27
함수형 프로그래밍  (0) 2021.06.17
컴퓨터의 구성  (0) 2021.06.12
절차적 프로그래밍 vs 객체지향 프로그래밍  (0) 2021.06.10
명령형 프로그래밍 vs 선언형 프로그래밍  (0) 2021.06.09