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

김수영·2022년 2월 3일
0

Computer Science

목록 보기
1/4
post-thumbnail

1. 프로세스(Process)

운영체제에서 실행 중인 하나의 애플리케이션

사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행한다. 하나의 애플리케이션은 여러 프로세스(다중 프로세스)를 만들기도 한다.

2. 스레드(Thread)

코드가 실행되는 하나의 흐름

사전적 의미로 한 가닥의 실이라는 뜻이며, 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어놓았다고 해 유래된 이름이다. 한 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 개라는 의미이다.

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

두 가지 이상의 작업을 동시에 처리하는 것을 의미

운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행한다. 멀티 태스킹이 꼭 멀티 프로세스를 의미하는 것은 아니다. 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션도 있다.

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

멀티 스레드는 다양한 곳에서 활용 중이다.

  • 대용량 데이터의 처리시간을 줄이기 위한 분할 및 병렬 처리
  • UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위한 사용
  • 여러 클라이언트의 요청을 처리하는 서버 개발

스레드의 특징

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

프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.

멀티 스레딩의 장점

  • 메모리 공간과 시스템 자원의 소모가 줄어든다. (전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용한다)

  • 시스템의 처리량(Throughput)이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축된다.

멀티 스레딩의 문제점

멀티 프로세스 기반으로 프로그래밍을 하면 프로세스 간 공유하는 자원은 없다.
따라서 동일한 자원에 동시에 접근하는 일이 없다.

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

따라서 동기화 작업이 필요하며, 동기화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야 한다.

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

동시성 vs 병렬성

동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한된다. 운영체제는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다. 이런 방식을 시분할 이라고 한다.

  • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴

  • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

Context Switching

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

profile
기술과 인문학의 교차점

0개의 댓글