프로세스와 스레드

개발하는개발자·2022년 9월 7일
0

Java Thread

목록 보기
1/10

프로세스와 스레드

프로그램이 실행되면 운영체제로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다.

프로세스 생성의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리(Ram)에 적재된다는 뜻이다.

-프로그램 : 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램
-프로세스 : 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고있는 상태

프로세스는 Code,Data,Stack,Heap 영역의 네가지 구조로 되어있다.

  • Code : 프로그래머가 작성한 프로그램이 작성된다
  • Data : 코드가 실행되면서 사용한 변수나 파일들의 데이터가 모여있다
  • Stack : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용된다
  • Heap : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다

코드 영역과 데이터 영역은 선언할 때 그 크기가 결정되는 정적 영역이고
스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역이다.

원칙적으로 서로 다른 프로세스간의 메모리 공간 접근은 허용되지 않는다.
만약 프로세스간 서로 다른 자원에 접근하려면 프로세스간의 통신을 해야한다.

스레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하며, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다. 프로세스를 생성하면 기본적으로 하나의 메인스레드가 생성된다.

스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.

반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.

한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

프로세스는 자원을 공유하지 않지만, 스레드는 자원을 공유한다.

멀티 태스킹, 멀티 프로세스, 멀티 스레딩

멀티태스킹이란 OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위를 말한다.

멀티 프로세스란 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

멀티 프로세스는 다음과 같은 특징이 있다.

  • 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다
  • 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당된다
  • 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다
  • 메모리 사용량이 많다
  • 스케쥴링에 따른 Context Switch이 많아지고, 성능 저하의 우려가 있다

멀티 스레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것이다.

멀티 스레딩은 다음과 같은 특징이 있다

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

CPU의 core는 한 번에 하나의 작업만 수행할 수 있으므로, 동시에 처리할 수 있는 작업의 개수는 core의 개수와 일치한다. 실제로 실행하는 쓰레드의 숫자는 core의 개수보다 훨씬 많기때문에 동시에 수행하는 것처럼 아주 짧은 시간을 번갈아가면서 수행한다.

profile
하루에 하나씩 배우자

0개의 댓글