프로세스와 스케줄링에 대한 설명은 이전 포스팅에서 했다
그렇다면 프로세스와 쓰레드란 무엇일까 ?
[ 이전 포스팅 ]
https://sangbok-diary.tistory.com/5
프로세스와 스케줄링에 대해서
이번 주 면접에서 프로세스와 스케줄링에 대한 면접 질문이 있었다. 하지만 제대로 대답하지 못하였다 스케줄링에 대해서는 명확히 아는 것이 없어 하나도 대답하지 못하였고, 프로세스는 실행
sangbok-diary.tistory.com
[ 참고 블로그 ]
https://brunch.co.kr/@kd4/3#comments
프로세스와 스레드의 차이
기술 면접 단골손님 feat. 운영체제 | 프로세스와 스레드에 대해서 설명해주세요. 익숙한 질문입니다. 신입 개발자 면접 질문 목록에 빠지지 않고 등장하는 질문인데요. 아무리 쉽고 익숙한 질문
brunch.co.kr
https://www.youtube.com/watch?v=iks_Xb9DtTM
1. 프로세스와 쓰레드란 ?
프로세스란, 이전 포스팅에서도 다뤘지만
메모리에 올려진 실행하는 프로그램을 의미한다.
예를 들어, 스타크래프트.exe 라는 게임 프로그램을 실행한다고 해보자.
그러면 메모리에 스타크래프트의 명령어들이 올라가게 되고, 해당 프로레스가 실행되기 위해 CPU로 부터 자원 할당을 대기, 실행하게 된다.
이 때 프로세스를 진행하는 과정 안에서 내용들을 분배해서 진행하는 것을 쓰레드라고 말한다.
2. 프로세스의 구조에 대해서
프로세스의 구조를 살표보자
(1) code : 컴파일 된 소스코드가 저장되는 구역
(2) data : 전역 변수 / 초기화 된 데이터가 저장되는 영역
(3) heap : 코드에서 동적으로 생성되는 데이터가 저장되는 영역
(4) stack : 임시 데이터(로컬변수, 함수 호출)가 저장되는 영역
쓰레드는 프로세스 내에서 stack만 따로 할당 받고 code, data, heap 영역은 공유하여 사용하게 된다.
쓰레드는 이렇게 프로세스가 진행되는 과정에서 여러가지 실행의 흐름입니다.
조금 더 간단하게 설명해보겠습니다
푸드코트가 있습니다.
이곳에는
A 한식 / B 중식 / C 일식
이라는 가게들이 있습니다.
이 때 C 일식에 초밥, 돈까스, 가츠동 메뉴 주문이 들어왔습니다
C 가게는 먼저 초밥을 만들기 위해 회를 썰고, 밥을 준비합니다.
그 동안 인원이 없기에 돈까스와, 가츠동 메뉴는 대기중입니다.
프로세스란 A,B,C 가게를 의미합니다.
다양한 가게들은 즉 프로그램을 의미하기도 합니다.
그리고 이러한 가게들에서 메뉴를 만들어 내기 위해서는 인원과 재료, 가스버너 등이 필요합니다.
이러한 자원들을 동시에 공유/사용하여 음식을 만들어 내는 것을 쓰레드라고 합니다.
3. 멀티 프로세스와 멀티 스레드의 차이
(1) 멀티 프로세스
[ 정의 ]
하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것
[ 장점 ]
여러 개의 자식 프로세스 중 하나의 문제가 발생하면 해당 프로세스를 종료하는 것으로 다른 영향으로 확산 되지 않습니다.
[ 단점 ]
(1) 문맥 교환(Context Switching) 에서의 오버헤드
- 문맥 교환 과정에서 캐쉬 메모리의 초기 화 등 무거운 작업이 진행되어 많은 시간이 소모 되는 등 오버헤드가 발생
- 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, 문맥 교환이 발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬정보를 불러와야한다.
(2) 프로세스 사이의 어렵고 복잡한 통신 기법
- 프로세스는 각각 독립된 메모리 영역을 할당 받기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유 할 수 없다.
(2) 멀티 쓰레드
[ 정의 ]
하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것
윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하지만 멀티 쓰레드를 기본으로 지정하고 있다, 또한 웹 서버도 대표적인 멀티 쓰레드 응용 프로그램이다
[ 장점 ]
(1) 시스템 자원 소모 감소
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능
(2) 시스템 처리량 증가(처리 비용 감소)
- 스레드 간 데이터를 주고 받는 것이 간단해지고, 시스템 자원 소모가 줄어든다. 스레드 사이의 작업량이 작아 문맥 교환이 빠르다.
(3) 간단한 통신 방법으로 인한 프로그램 응답 시간 단축
- 스레드는 프로세스 내의 stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다
[ 단점 ]
(1) 주의 깊은 설계 필요
(2) 디버깅이 까다롭다
(3) 단일 프로세스 시스템의 경우 효과를 기대하기 힘들다
(4) 다른 프로세스에서 스레드 제어가 불가능하다
(5) 멀티 스레드의 경우 자원 공유 문제가 발생
(6) 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다
4. 멀티 프로세스 대신 멀티 스레드를 사용하는 이유
멀티 프로세스를 대신하여 멀티 스레드를 사용하는 이유는 프로그램을 여러개 키는 것 보다, 하나의 프로그램으로 여러 작업을 해결하는 것이 더 빠르기 때문이다
그렇다면 왜 더 빠른 것 일까?
일단 stack 영역을 제외한 부분을 공유해서 사용하고 있고, 프로세스는 문맥 교환시 소모되는 오버헤드가 크기 때문이다.
단, 쓰레드의 경우 stack을 제외한 영역을 공유하기에 동시에 같은 전역변수(data)를 사용하게 되면 충돌이 발생하기에 주의가 필요하다
'CS' 카테고리의 다른 글
rest api란 무엇일까 ? (2) | 2024.01.22 |
---|---|
RDBMS, NoSql이란 무엇일까? (0) | 2024.01.14 |
프로세스와 스케줄링에 대해서 (0) | 2023.12.07 |
쿠키와 세션, 캐시의 차이란 무엇일까? (1) | 2023.11.30 |