Thread
스레드는 한 프로그램 or 프로세스 내에서 실행되는 동작(기능, 흐름)의 단위 입니다. 한 프로세스 내의 스레드는 Stack Memory를 제외한 나머지 Memory 영역을 공유할 수 있습니다.
Multi Thread
멀티 스레드란 하나의 프로세스내에서 두 개의 이상의 스레드를 가지게 됩니다. 한 프로세스가 동시에 여러작업(병렬로 처리)을 하기 위해 멀티 스레드를 사용하며, 각각의 스레드는 독립적으로 기능을 수행하기 위해 독립적인 Stack Memory와 PC Register 가지며 나머지 Code, Data, Heap 영역을 공유하여 사용합니다.
Stack Memory
- 스레드가 함수를 호출하기 위해서는 매개변수, 리턴값, 지역변수 저장 등을 위한 독립적인 Stack 영역이 필요합니다. 결과적으로 스레드는 프로세스로부터 Stack 영역을 독립적으로 할당 받고 나머지 영역(Code, Data, Headp) 영역은 공유하는 형태를 갖게 됩니다.
PC Register
- 멀티 스레드는 스레드마다의 각각 PC Register를 가져야하는데 그 이유는 프로세스 내의 스레드끼리 Context Switcing이 일어나게 되는데 이를 수행하려면 PC register에 code address가 저장되어 있어야 스레드를 이어서 실행할 수 있기 때문입니다.
Multi Process 와 Multi Thread
멀티 프로세스와 멀티 스레드는 동시에 여러 작업을 수행할 수 있어 유사한 점이 있습니다. 하지만 두 방법은 장점과 단점이 다릅니다. 어떤차이가 있을까요?
멀티 프로세스
- 독립된 메모리 영역을 가져 안정성이 높아 하나의 프로세스가 문제가 생겨도 다른 프로세스에는 영향을 주지 않습니다.
- 독립된 메모리 영역을 가지기 때문에 많은 메모리공간과 CPU 시간을 차지
- 컨텍스트 스위칭시 프로세스 간의 통신과 캐시 메모리를 초기화하는 작업이 있어 속도가 느립니다.
멀티 스레드
- 메모리 영역을 공유를 하기 때문에 메모리 공간과 시스템 자원 소모가 줄어들게 되며, 멀티 프로세스와 다르게 캐시메모리를 초기화할 필요가 없기 때문에 컨텍스트 스위칭 연산이 빠릅니다.
- 프로세스간의 통신(IPC) 보다 스레드간의 통신 비용이 적기 때문에 통신으로 인한 오버헤드가 적습니다.
- 스레드간의 자원을 공유하기 때문에 *동기화문제가 발생할 수 있기 때문에 주의깊은 설계가 필요합니다.
- 하나의 스레드가 문제가 생기면 프로세스내의 다른 스레드에도 문제가 생길 수 있습니다.
메모리 구분이 필요할 경우에는 멀티프로세스가 유리하고, 컨텍스트 스위칭이 자주 일어나고 데이터 공유가 빈번하면 멀티 스레드를 사용하는것이 유리합니다.
'CS' 카테고리의 다른 글
트랜젝션(Transaction) (0) | 2022.05.03 |
---|---|
가상메모리(virtual memory) (0) | 2022.04.30 |
교착상태(DeadLock) (0) | 2022.04.22 |
멀티 프로세스(Multi process), Context 와 Context Switching (0) | 2022.04.14 |
프로세스 메모리 구조 (0) | 2022.04.13 |