스레드(Thread)란??
by AMAD
Thread란?
thread는 한 process내에서 실행되는 동작(기능 function)의 단위를 말한다. 각 스레드는 속해있는 프로세스의 Stack메모리를 제외한 나머지 메모리 영역을 공유할 수 있다.
Multi thread란?
하나의 프로세스가 동시에 여러개의 일을 수행할 수 있도록 해주는 것을 말한다. 즉, 하나의 프로세스에서 여러 작업을 병렬로 처리하기 위해 멀티 스레드를 사용한다. 멀티 스레드에서는 한 프로세스 내에 여러 개의 스레드가 있고, 각 스레드들은 스택(stack) 메모리를 제외한 나머지 영역(code, data, heap)을 공유하게 된다.
thread는 왜 독립적인 stack 메모리 영역이 필요한가?
스레드가 프로세스내에서 독립적인 기능을 실행한다는 것은 독립적으로 함수를 호출함을 의미한다. 따라서 각 스레드가 독립적인 동작을 실행하기 위해서는 각 스레드의 스택 메모리 영역이 독립적이어야 한다.
(결과적으로 스레드는 프로세스로부터 스택 메모리 영역은 독립적으로 할당받고, 코드, 데이터, 힙 영역은 공유하는 형태를 갖는다.)
프로세스와 스레드의 차이?
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고,
스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
즉, 프로세스는 실행파일이 메모리에 적재되어 CPU를 할당받아 실행되는 것이고, 스레드는 한 프로세스 내에서 실행되는 동작의 단위이다. 스레드는 프로세스 내에서 스택 영역을 제외한 코드, 데이터, 힙 영역을 공유한다.
멀티 프로세스와 멀티 스레드 비교 설명
멀티 스레드는 멀티 프로세스보다 메모리 공간을 적게 차지하고, context switching이 빠르다. 하지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험이 있다.
멀티 프로세스는 멀티스레드보다 많은 메모리 공간과 CPU를 차지하지만 하나의 프로세스가 장애를 일으키더라도 다른 프로세스에 영향을 미치지 않아 안정성이 높다. 하여 메모리 구분이 필요할때 멀티 프로세스를 사용한다.
멀티 프로세스 환경에서 프로세스간에 데이터를 어떻게 주고 받나?
원칙적으로 프로세스는 독립적인 주소 공간을 갖기 때문에, 다른 프로세스의 주소 공간을 참조할 수 없다. 하지만 경우에 따라 운영체제는 프로세스간의 자원 접근을 위한 매커니즘인 프로세스 간 통신(IPC, Inter-Process Comunication)을 제공한다. IPC는 크게 공유메모리 방식과 메시지 전달방식으로 나뉜다.
공유 메모리: 프로세스들이 주소 공간의 일부를 공유한다. 공유한 메모리 영역에 읽기/쓰기를 통해서 통신을 수행한다.
메시지 전달: 통상 system call을 사용하여 구현된다. 커널을 통해 send와 receive라는 두 가지 연산을 제공받는다. 예를 들면 프로세스1이 커널로 메세지를 보내면 커널이 프로세스2에게 메세지를 보내주는 방식으로 동작한다.
동기화 문제
동기화 문제란? - 서로 다른 스레드가 메모리 영역을 공유하기 때문에 여러 스레드가 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하는 문제이다.
시분할 시스템으로 작동하는 멀티 프로세스/멀티 스레드 시스템에서, 두 개의 스레드가 동일한 데이터인 count에 동시에 접근하여 조작한다는 상황을 가정해본다.
이때, 스레드1에서도 count++를 하고, 스레드2에서도 count++를 한다면 그 실행 결과가 접근이 발생한 순서에 따라 달라질 수 있다. 이를 경쟁상황(race condition)이라고 한다.
즉, 둘 이상의 스레드가 동일한 자원에 접근하여 조작하고, 그 실행 결과가 접근이 발생한 순서에 따라 달라지는 경쟁상황에 의해서 동기화 문제가 발생할 수 있다. 경쟁 상황으로부터 보호하기 위해, 우리는 한 순간에 하나의 프로세스/스레드만 해당 자원에 접근하고 조작할 수 있도록 보장해야 한다.
Mutex: 동기화 방법중 하나로 mutual exclusion의 약어이다. 공유자원에 접근할 수 있는 프로세스/스레드의 수를 1개로 제한하는 방법이다.
Semaphore: 공유 자원에 접근할 수 있는 프로세스/스레드의 개수가 semaphore 변수의 값만큼 (2개 이상이 될 수 있다는 것을 말한다.) 동시에 자원에 접근할 수 있는 방법이다.
'CS' 카테고리의 다른 글
proxy란?? (0) | 2023.10.10 |
---|---|
정적 리소스란?? (0) | 2023.10.06 |
페이징과 세그먼테이션 (0) | 2023.04.29 |
프로세스(process)란?? (0) | 2023.02.19 |
트랜잭션(Transaction)이란?? (0) | 2023.02.19 |
블로그의 정보
성장 하고 싶은 개발자
AMAD