[TIL]프로세스와 스레드

GyungHo Go·2021년 10월 27일
0

프로세스 란?

  • 프로세스는 운영체제로 부터 자원을 할당받는 작업단위라고 한다. 즉, 동적인 개념으로는 실행된 프로그램을 의미한다.
  • 컴퓨터에서 프로세스는 컴퓨터 프로그램의 인스턴스로 하나 이상의 스레드를 통해 실행된다.
  • 프로그램이 실행되면 프로세스 인스턴스가 생성된다. 인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리에 적재된다는 의미이다.
    여기서 프로그램이란, 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램을 말한다.

프로세스 특징

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack등)을 할당 받는다.
  • 기본적으로 프로세스당 최소 1개의 스레드(메인스레드)를 가지고있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 할 수 없다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다.

스레드 란?

  • 스레드는 어떤 프로그램 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
  • 프로세스의 특정한 수행경로이고, 프로세스가 할당받은 자원을 이용하는 실행위 단위라고 한다.
  • 컴퓨터에서 실행되는 스레드는 일반적으로 운영체제의 일부인 스케줄러에 의해 독립적으로 관리 될 수 있는 프로그래밍된 명령어의 가장 작은 시퀀스이다.
  • 일반적으로 하나의 어플리케이션은 하나 이상의 프로세스를 가지고있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.

멀티 프로세스와 멀티 스레드

멀티 프로세스

  • 하나의 어플리케이션(프로그램)을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
  • 멀티 프로세스는 안정성이 좋다. 여러 자식 프로세스중 하나에 문제가 생겨도, 다른 자식프로세스에 영향을 주지 안는다. 그리고 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원을 서로 다르게 할당된다.

멀티 스레드

  • 하나의 어플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.
  • 멀티 스레드의 특징으로는 응답성이 좋고, 자원 공유가 쉽다. 그리고 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다. 하지만 자식 스레드중 하나에 문제가 생긴 경우 전체 프로세스에 영향을 줄 수 있다.

정리

그래서 프로세스와 스레드가 무엇인지 그동안 공부한 내용을 바탕으로 정리해 보았다.
우선 프로그램이란, 어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일을 말한다. 이런 프로그램이 실행중인 상태를 프로세스라고 한다. 각각의 프로세스에는 독립된 메모리 공간을 할당 받는데, 이 메모리 공간에는 명령어들과 데이터를 갖게 된다.
오늘날 빠르고 쾌적하게 컴퓨터를 이용할 수 있는건 우리가 사용하는 운영체제가 멀티 프로세스를 지원하기 때문이다. 여러 프로세스가 동시에 돌아가는 것은 동시성, 병렬성 혹은 이를 혼합한 형태로 다뤄진다.
동시성은 프로세스 하나가 A작업을 조금하고, B작업을 조금하고, C작업을 조금씩 하는 등 돌아가면서 순차적으로 처리하는데, 이를 Context Switching이라고 한다. 이러한 작업이 문제 없이 돌아가기 때문에 동시에 이뤄진다고 느끼는 것이다.
병렬성은 프로스세스 하나에 여러 코어가 달린 방식이다. 멀티코어, 옥타코어와 같은 명칭이 붙은 멀티코어 프로세스가 달린 컴퓨터에서 주로 사용된다.
실행 중인 프로그램을 프로세스라고 했는데, 하나의 프로세스 안에서도 여러가지 일들이 처리될 필요가 있다. 예를들어 파일을 다운받는 동시에 다른 페이지로 이동할 수 있어야 하고, 유투브에서 데이터를 받아오는 동시에 영상을 제생할 수 있어야 할것이다. 이처럼 한 프로세스에 여러 갈래의 일들이 동시에 처리되어야 하는데 이를 스레드라고 한다. 멀티스레드가 지원되지 않는다고 하면 데이터를 받아오는 동안 다른 기능들은 동작을 할 수 없게 된다. 예를들어 api를 호출하는 네트워크 통신 구간이 있다면 이를 처리하기 위해 별도의 스레드로 둬서 처리하고, 다른 기능들도 별도의 스레드로 둬서 처리하도록 한다. 이처럼 하나의 프로그램 안에서 동시에 두가지 이상의 일들이 처리되어야 하는데 이를 멀티 스레드라고 한다.
오늘날 우리가 사용하는 대부분의 프로그램은 멀티 스레드를 지원하고 우리가 사용하는 OS들은 멀티 프로세스를 기반으로 실행하는 운영체제이다.

참고

profile
기록하는 습관

0개의 댓글

관련 채용 정보