[ TIL 70 | CS ] 프로세스와 스레드

angie·2022년 12월 29일
0

CS

목록 보기
8/8
post-thumbnail

프로세스와 스레드

1. 프로세스

프로그램과 프로세스

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

프로그램이 실행되면 프로세스 인스턴스가 생성되어 컴퓨터 메모리에 적재된다.

운영 체제를 통해 여러 프로세스를 실행하고 관리하는 것을 멀티 태스킹이라 한다.

1) 멀티 태스킹

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

이를 통해 여러 프로그램을 동시에 열고 작업할 수 있는 것이다.

프로세스의 구조

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

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

코드 영역과 데이터 영역은 선언 시 크기가 결정되는 정적 영역이며, 스택영역과 힙 영역은 프로세스가 실행되는 동안 크기가 변화하는 동적 영역이다.

2. 스레드

  • 스레드 : 프로세스 내에서 실행되는 흐름의 단위

하나의 프로그램은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 하나 이상의 스레드를 갖는다.

스레드는 프로세스 내에서 각각 Stack 영역만 따로 할당 받고 Code, Data, Heap 영역은 공유한다. 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
반면 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.

1) 프로세스 vs 스레드 결론

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

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

1) 멀티 프로세스

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

멀트 프로세스의 특징

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

2) 멀티 스레드

  • 멀티 스레드 : 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것

멀티 스레드를 사용하는 이유

한 애플리케이션에서 단일 스레드로 긴 작업을 수행하면 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.

멀티 스레드의 특징

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

4. 멀티 프로세스와 멀티 스레드의 비교

멀티 스레드는 멀티 프로세스에 비해 상당한 이점이 있지만 위험 부담도 크다.

멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행하는 경우

1) 자원의 효율성 증대

  • 자원을 할당하는 비용이 적다.(프로세스는 자원을 공유하지 않으므로 각 프로세스마다 자원을 따로 할당해야하기 때문)
  • 스레드 간 데이터를 간단하게 주고 받을 수 있다. (스레드는 자원을 공유한다.)
  • 시스템 자원 소모가 줄어든다.

2) 응답 시간 단축 및 처리 비용 감소

  • 스레드간의 통신 비용이 적게 든다.

프로세스 간에는 IPC를 사용하여 통신하기 때문에 비용이 크다.

3) 멀티 스레드의 안정성 문제

여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 동시에 이 데이터를 수정하기 때문에 생기는 문제이다.

멀티 프로세스 환경에서는 문제가 발생하면 해당 프로세스를 중단시키면 된다.

반면, 멀티 스레드에서는 하나의 스레드가 데이터 공간을 망가뜨리면, 해당 공간을 공유하는 모든 스레드에 영향을 미친다.

profile
better than more

0개의 댓글