프로세스와 스레드의 차이를 설명하실 수 있나요?
👉 프로세스란
- 프로그램
- 어떤 일을 수행하기 위해 만들어진 명령 모음
- 명령어 모음이 파일로 빌드 되어 보조 기억 장치에 저장되어 있는 정적인 상태
- 프로그램 실행 명령을 내리면
- CPU는 보조 기억 장치에서 해당 프로그램을 꺼내
- 메인 메모리에 올려놓고
- 코드를 해석하며 작업을 시작합니다.
- 프로그램이 메인 메모리로 올라와 실행되고 있는 상태를 프로세스라고 합니다.
- 병행 처리란 작업을 조금씩 나누어 실행하면서 컴퓨터가 마치 여러 작업을 동시에 실행하는 것처럼 보이게 하는 처리 방법입니다.
- 햄버거를 만들 때 치킨버거, 새우버거, 치즈버거로 진행 순서를 바꾸는 것을 컨텍스트 스위칭이라고 합니다. 컴퓨터에서는 컨텍스트 스위칭이 매우 빠르게 일어나기 때문에 사람의 눈에는 마치 여러 프로그램이 동시에 돌아가는 것처럼 느껴집니다.
- 프로그램이 효율적으로 설계되었다면 두 코어가 프로세스를 두 개씩 ‘병렬’로 분담해서 각자가 맡은 버거를 ‘병행’해서 요리하기도 합니다. 이처럼 여러 개의 프로세스를 함께 진행하는 것을 멀티 프로세싱이라고 부릅니다.
👉 스레드란
- 한 프로세스 안에 여러 작업이 동시에 진행되기도 합니다. 예를 들어 채팅 앱은 사용자가 메시지를 입력하는 도중에도 상대방이 새로운 메시지를 보냈는지 계속해서 확인합니다. 만약 상대방이 이전 메시지로 보낸 동영상에 ‘받기’를 누른 상태라면 채팅을 하는 동시에 동영상 다운로드까지 함께 진행되는 중이죠. 이처럼 한 프로세스 안에 하나 이상 진행될 수 있는 일의 단위를 스레드라고 합니다.
- 스레드 역시 프로세스와 같이 컨텍스트 스위칭을 통해 여러 개의 작업이 병행 처리됩니다.
- 여러 스레드가 함께 실행되는 것을 멀티 스레딩이라고 합니다.
👉 프로세스와 스레드의 차이?
메인 메모리를 어떻게 함께 사용하는가
- 멀티 프로세싱에서 각각의 프로세스는 요리 탁자에 선을 긋듯 자기 영역을 명시해 둡니다.
- 그렇기 때문에 동시에 진행되는 프로세스가 많아지면 메인 메모리는 그 배수만큼 필요합니다.
- 반면 스레드는 서로의 공간을 구분하지 않습니다.
- 아무리 스레드가 많아져도 메모리를 추가로 차지하지 않습니다. 그리고 프로세스와는 달리 자리를 옮겨 다닐 필요가 없기 때문에 컨텍스트 스위칭에 드는 부담도 덜합니다.
- 이처럼 성능상 스레드가 유리하지만, 주의할 점이 있습니다. 같은 메모리 공간을 여러 스레드가 사용하기 때문에 그 과정에서 발생할 수 있는 오류에 대비해서 프로그래밍해야 한다는 것이죠.
- 프로세스는 실행될 때 운영체제로부터 프로세서, 필요한 주소 공간, 메모리 등 자원을 할당받습니다. 스레드란 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.
- 그러니까 프로세스와 스레드에 대한 질문은 결국에는 운영체제가 시스템의 자원을 어떤 단위로 할당하고, 프로세스와 스레드는 이 자원을 어떻게 사용하느냐를 알고 있냐에 대한 질문입니다.
- 그렇다면 왜, 여러 프로세스(멀티 프로세스)로 할 수 있는 작업들을 굳이 하나의 프로세스에서 스레드로 나눠가면서 할까요? 이유는 굉장히 간단합니다. 운영체제는 시스템 자원을 효율적으로 관리하기 위해서 스레드를 사용하는 것이죠.
- 자세히 말씀드리자면 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있습니다. 뿐만 아니라 프로세스 간의 통신보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어들게 됩니다.
- 이처럼 스레드를 활용하면 자원의 효율성이 증가하기도 하지만 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제에 신경을 써야 합니다. 때문에 멀티스레드 프로그래밍은 프로그래머의 주의를 요구합니다.
- 다시 한번 말씀드리지만 위 질문에 대한 핵심은 운영체제에서 작업을 실행할 때 자원을 할당하는 단위를 알고 있느냐와 프로그램을 멀티 스레드를 구현할 때 장.단점을 알고 있느냐에 대한 질문입니다.
- 참고한 링크
'Knowledge' 카테고리의 다른 글
상호배제 & 뮤텍스,세마포어,스핀락 개념 (0) | 2023.11.07 |
---|---|
코어와 프로세스의 관계 (0) | 2023.11.07 |