기술면접의 단골 질문인 쓰레드와 프로세스의 차이를 기술하려고 한다
프로세스와 스레드의 정의
- 프로그램 : 프로그램이란 파일이 저장장치에 저장되어있지만 메모리에는 올라가 있지 않은 정적인(실행되지 않은) 코드덩어리를 말한다.
- 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위
- 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행흐름의 단위
운영체제는 안정성을 위해 한 프로그램에서는 한가지 프로세스만 메모리내에 접근할 수 있도록 제약을 두고있고, 이로인해 프로세스보다 더 작은 실행 단위개념이 필요하게 되었다. 이것이 쓰레드이다. CPU 입장에서의 최소 작업단위가 된다.
쓰레드는 프로세스 특성의 한계를 해결하기 위해 만들어진 개념이기때문에 쓰레드의 특성은 다음과 같다.
쓰레드는 프로세스와 다르게 쓰레드간 메모리를 공유할 수 있다. 쓰레드끼리 프로세스의 자원을 공유하며 프로세스의 일부 흐름이 되는 것이다.
- 멀티쓰레드
하나의 프로세스는 하나이상의 쓰레드를 가지게 된다.
(장점) 쓰레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하여 메모리 자원을 아낄 수 있으며 응답이 빠르다.
(단점) 자원을 공유하기 때문에 동기화 문제가 발생할수밖에 없다. Synchronization Issue !
A쓰레드가 자원을 사용하다가 B 쓰레드로 넘어갔다가 다시 A 쓰레드가 해당 자원을 접근해 수정하는 경우 접근을 하지못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.
'IT > etc' 카테고리의 다른 글
Static변수에 Injection 하는 방법, @Value 변수값이 null 일 때 (0) | 2022.01.25 |
---|---|
MVC패턴이란? (0) | 2022.01.24 |
[Spring] 의존성 주입 (Dependency Injection, DI) (0) | 2021.07.12 |
[TeamsWebhook] 팀즈 웹훅으로 채널에 메세지 보내기 (0) | 2021.06.17 |
[AWS] AWS Global Infra Overview 필기 (0) | 2021.05.25 |