프로세스와 스레드의 차이

dongbin_Shin·2021년 12월 9일
0

OS

목록 보기
1/2

프로세스와 스레드

프로세스: 실행중인 프로그램
스레드: 프로세스의 실행 단위
즉, 스레드는 한 프로세스 안에서 동작되는 여러개의 실행 흐름이라고 할 수 있다.

프로세스 간 통신 VS 스레드 간 통신

결론부터 말하면 스레드 간 통신이 프로세스 간 통신보다 더 빠르다.

같은 프로세스에 속한 스레드들은 코드, 데이터, 힙을 공유하고 각각 별도의 스택 영역을 갖는다. 때문에 변수는 스레드 간 공유될 수 없지만 코드, 데이터, 힙 영역이 공유되므로 컨텍스트 스위칭 비용이 줄어든다. 컨텍스트 스위치가 일어날 때 캐시를 비우지 않는 것 또한 컨텍스트 스위칭 비용을 줄인다.

컨텍스트 스위칭

Context Switching은 한 task가 끝날 때까지 CPU가 놀게 놔두지 않고 여러작업을 번갈아 실행 시키며 동시에 처리하는 방법이다.

실행되고 있는 Task의 상태(Context)를 보관하고 새로운 Task의 상태를 적재하는 순서로 진행된다.

컨텍스트 스위칭이 일어날 때 CPU는 작업을 멈추므로, 컨텍스트 스위치가 자주 일어나면 오버헤드가 발생해 성능이 저하된다.

캐시 (Cache)

캐시는 CPU와 메모리 사이에 위치해 CPU가 한번 이상 읽은 메모리의 데이터를 저장하고 있다가 다시 요청이 들어오면 메모리까지 가지 않고 저장하고 있던 데이터를 반환하는 역할을 한다.

멀티 스레드 프로그래밍을 할 때 캐시 데이터를 동기화 해주어 데이터가 불일치하지 않도록 주의를 해야한다.

프로세스 컨텍스트 스위칭

프로세스끼리는 공유하는 데이터가 없으므로 캐시에 저장된 데이터를 모두 지우고 새로 캐시에 데이터를 저장해야한다.

스레드 컨텍스트 스위칭

스레드끼리는 코드, 데이터, 힙을 공유하기 때문에 캐시 데이터를 지우지 않아도 된다.

때문에 프로세스 간 통신속도보다 스레드 간 통신 속도가 더 빨라진다. (캐시 데이터 지우는 비용 생략)

멀티 스레딩의 단점

  1. 스레드간의 공유영역에 대해 동시에 접근하게 되면 데이터의 정합성에 문제가 생길 수 있다. 그래서 데이터 동기화를 반드시 신경써줘야 한다.

  2. 하나의 스레드에서 치명적인 에러가 발생해 종료되면 다른 스레드들 또한 종료될 수 있다.

동기화

동일한 데이터를 동시에 접근하는 영역을 Critical Section(임계영역)이라고 한다.

우리는 임계 영역을 제어하기 위해 다음의 조건을 충족해야 한다.

  1. Mutual Exclusion (상호 배제): 한 프로세스에서 실행 중인 영역은 다른 프로세스들이 실행할 수 없다.

  2. Progress (진행): 임계영역에서 실행중인 프로세스가 없고 별도의 동작이 없는 프로세스들만 진입 후보로 참여될 수 있다.

  3. Bounded Waiting (한정된 대기): 한 프로세스가 임계영역에 진입 신청 후 부터 허용될 때까지 다른 프로세스들이 임계영역에 진입하는 횟수는 제한이 있어야 한다.

동기화 방법

  1. Lock: 하드웨어를 통해 프로세스를 제어한다. 임계 영역에 진입하는 프로세스는 Lock을 획득하고 빠져나올 때 방출한다. 다중 처리 환경에서 시간 효율성이 떨어지는 단점이 있다.

  2. Semaphores: 소프트웨어를 통해 프로세스를 제어한다.
    2-1. 카운팅 세마포어: 가용한 개수를 가진 자원에 대한 접근 제어용으로 사용한다. 자원을 사용하면 세마포어가 감소하고 방출하면 증가한다.
    2-2. 이진 세마포어: 0과 1사이의 값만 가능하고, 다중 프로세스들 사이의 임계영역 문제를 해결하기 위해 사용한다.

세마포어는 Busy Waiting 문제가 발생하는 단점이 있다.

초기 세마포어는 임계 영역 접근을 위해 진입 코드를 계속 반복 실행하며 CPU를 낭비한 Spin lock 문제가 발새앴다. 이를 Busy Waiting이라고 부르며 비효율적이다. 이를 해결하기 위해 진입 시도에 실패한 프로세스는 Block시키고, 임계 영역의 자리가 날 때 다시 호출하는 방식을 사용했다.

  1. DeadLock: 둘 이상의 프로세스가 무한정 기다리고 있는 상황에 임계 영역에서 실행되는 프로세스는 대기중인 프로세스가 실행되어야만 빠져나올 수 있는 상황이다.

Reference

프로세스와 스레드의 차이를 알아보자

profile
멋있는 백엔드 개발자

0개의 댓글