백엔드/[컴퓨터 공학] 기초

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

테오구 2021. 11. 25. 12:53
728x90

프로세스

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

 

스레드(Thread)

하나의 스레드는 코드가 실행되는 하나의 흐름으로

비유를 하자면 일상생활에 차도를 예로 들 수 있을것같다.
도로에서 차로가 1개만 존재할때 많은 차들이 몰리면 차가 막히게 된다.
만약 차로가 1개 이상 여러개 존재할때에도 많은 차들이 몰렸을때 막힐지언정,
차로가 1개만 존재할때 보다는 차가 덜 막힐것이다.
도로를 프로세스, 차로를 스레드, 차를 프로그램의 내부 코드들로 생각하면 이해가 쉽다.
차로가 1개 이상 존재할 경우, 이 경우를 컴퓨터 공학에서는 멀티 스레드라고 한다.

 

멀티 스레드(Multi-Thread)

운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행합니다.

하지만 멀티 태스킹은 꼭 멀티 프로세스를 의미하는 것은 아닙니다.

 

멀티 프로세스가 애플리케이션 단위의 멀티 테스킹이라면 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹입니다.

 

특징

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

장점

  • 응답성 : 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속 되어 사용자에 대한 응답성이 증가한다.
    ex) 멀티 스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에서 사용자와 상호작용 가능
  • 경제성 : 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어든다. 스레드 간 통신이 필요한 경우에도 쉽게 데이터를 주고 받을 수 있으며, 프로세스의 context switching과 달리 스레드 간의 context switching은 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
  • 멀티프로세서 활용 : 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.

단점

  • 임계 영역(Critical Section)? 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 코드 블록. 공유하는 자원에 동시에 접근하는 경우, 프로세스와는 달리 스레드는 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 따라서 동기화가 필요!
  • 동기화를 통해 스레드의 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤할 수 있다. (Java에서 synchronized 키워드) 그러나 불필요한 부분까지 동기화를 하는 경우, 과도한 lock으로 인해 병목 현상을 발생시켜 성능이 저하될 가능성이 높기 때문에 주의해야 한다. 동기화 방법에는 뮤텍스와 세마포어가 있다. 
  • context switching, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느리다.

동시성과 병렬성의 차이

운영체제는 각 스레드를 따라 분할하며 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 합니다. 이런 방식을 시분할이라고 합니다.

  • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 보이게 합니다.
  • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됩니다.

Context Switching이란?

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

728x90

'백엔드 > [컴퓨터 공학] 기초' 카테고리의 다른 글

Checkpoint - 컴퓨터 공학 기초  (0) 2021.11.26
캐시  (0) 2021.11.26
가비지 컬렉션  (0) 2021.11.26
그래픽  (0) 2021.11.25
문자열  (0) 2021.11.25