[CS] 프로세스, 스레드, 멀티 스레드

Jae ·2021년 11월 26일
0

Computer Science

목록 보기
3/5

1. 프로세스(Process)


  • 운영체제에서는 실행 중인 하나의 애플리케이션프로세스라고 부른다.

사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하게 되는데, 이때 실행되는 애플리케이션을 프로세스라고 부른다.

예를 들어 Chrome 브라우저를 두 개 실행하면, 두 개의 프로세스가 생성되고 이렇게 하나의 애플리케이션은 여러 프로세스(다중 프로세스)를 만들기도 한다.

다음 사진에서 확인할 수 있는 항목 하나하나가 전부 프로세스다.

2. 스레드(Thread)


스레드는 사전적 의미로 한 가닥의 실이라는 뜻인데, 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래된 이름이다.

하나의 스레드는 코드가 실행되는 하나의 흐름이기 때문에, 한 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 개 생긴다는 의미다.

3. 멀티 스레드(Multi-Thread)


  • 멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 의미한다.
  • 운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행한다.

프로세스를 병렬로 실행하는 예시가 뭐가 있을까? 사실은 우리가 정말 흔히 하는 작업들에서 찾아볼 수 있다. 워드 문서 작업을 하거나 또는 포토샵이나 일러스트레이터를 사용해 디자인이나 편집을 하면서, 동시에 Chrome 브라우저에서 Youtube를 통해 음악을 듣는 행위들이 병렬적인 프로세스다.

물론 멀티 태스킹이 꼭 멀티 프로세스를 의미하는 것은 아니다. 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션도 있는데, 하나의 프로세스가 어떻게 두 가지 이상의 작업을 처리할 수 있을까? 그 비밀은 멀티 스레드에 있다.

  • 멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드애플리케이션 내부에서의 멀티 태스킹이라고 할 수 있다.

1) 스레드의 특징

  • 프로세스 내에서 실행되는 흐름의 단위
  • 각 스레드마다 call stack이 존재(call stack: 실행 중인 서브루틴을 저장하는 자료 구조)
  • 스레드는 다른 스레드와 독립적으로 동작

2) 멀티 스레딩의 장점

  • 프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우, 메모리 공간과 시스템 자원의 소모가 줄어든다.
  • 스레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용하게 된다.
  • 따라서, 프로세스 간 통신 방법(IPC)에 비해 스레드 간의 통신 방법이 훨씬 간단하다.
  • 시스템의 처리량(Throughput)이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축되고, 이런 장점 때문에 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 스레드로 나눠 수행한다.

3) 멀티 스레딩의 문제점

멀티 프로세스 기반으로 프로그래밍할 때에는 프로세스 간 공유하는 자원이 없다. 따라서 동일한 자원에 동시에 접근하는 일이 없지만, 멀티 스레딩을 기반으로 프로그래밍할 때에는 공유하는 자원에 대하여 고민이 필요하다.

서로 다른 스레드가 같은 데이터에 접근하고, 힙 영역을 공유하기 때문에 서로 다른 스레드가 서로 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있기 때문이다.

그렇기 때문에 멀티스레딩 환경에서는 동기화 작업이 필요하다. 동기화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야 한다.

관련 키워드

  • 데드락(Deadlock, 교착 상태)
  • 뮤텍스(Mutex), 세마포어(Semaphore)

4) 동시성(Concurrency) vs 병렬성(Parallelism)

  • 동시에 돌릴 수 있는 스레드 수컴퓨터에 있는 코어 개수로 제한된다.
  • 운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다. 이런 방식을 시분할이라고 한다.
    • Concurrency(동시성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
    • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행

5) Context Switching이란?

  • 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 태스크(프로세스, 스레드)를 멈추는 것을 Context Switching이라고 한다.

0개의 댓글