이전 포스팅에선 프로세스와 스레드에 대해 알아보았습니다.
이번 포스팅에선 멀티 프로세스와 멀티 스레드에 대해 알아볼건데요.
프로세스와 스레드가 무엇인지에 대해 이해가 안가신다면 아래 포스팅을 참고하시면 됩니다.
멀티 프로세스 ( Multi Process )
하나의 프로세스는 하나의 작업만 처리할 수 있기 때문에 여러 작업을 동시에 처리할 수 없습니다.
그렇기 때문에 부모 프로세스를 fork 해서 자식 프로세스를 만들어 여러 개의 프로세스를 구성해
하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것입니다.
이 때, 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 됩니다.
멀티 프로세스의 장점
- 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다.
즉, 하나의 프로세스가 잘못 되어도 프로그램은 동작 한다. - 구현이 간단하고, 각 프로세스들이 독립적으로 동작하며 자원의 서로 다르게 할당되어 안정적이다.
멀티 프로세스의 단점
- 멀티 스레드 보다 많은 메모리 공간과 CPU 시간을 차지한다.
- 작업량이 많을수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하가 우려된다.
- 프로세스는 각각의 동립된 영역을 할당당았기 때문에, 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.
그렇기 때문에, 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
멀티 스레드 ( Multi Thread )
하나의 어플리케이션을 여러개의 스레드로 구성하고 각 스레드가 작업을 처리하는 것.
멀티 프로세스 대신 멀티 스레드를 사용하는 것은 “프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것” 이라고 할 수 있습니다.
- 자원의 효율성 증대
- 처리 비용 감소 및 응답 시간 단축
- 동기화 문제를 주의해야한다.
멀티 스레드의 장점
- 스레드끼리는 긴밀하게 연결되어 있다.
- 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋다.
- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
- 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
- 멀티 프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
- 스레드 사이 작업량이 작아 Context Switching이 빠르다. (스레드는 Stack영역만 처리하면 되기 때문 )
- 스레드 간의 자원(Code, Data, Heap)을 공유하고 있기 때문에 통신의 부담이 적어 응답 시간이 빠르다.
멀티 스레드의 단점
- 스레드 간의 데이터 공유 시 동기화 문제와 교착상태가 발생하지 않도록 주의해야 한다. ( 공유 자원 관리 필요 )
- 스레드가 개별로 유기적으로 움직이고 있기 때문에 구현 및 프로그램 테스트, 디버깅이 어렵다.
- 하나의 스레드의 오류로 전체 프로세스에 영향을 줄 수 있다.
- 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
멀티 프로세스와 멀티 스레드의 차이점
종류 | 멀티 프로세스 | 멀티 스레드 |
장점 | 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않는다. | 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상된다. 또한 코드영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적다. |
단점 | 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생하고 Context Switching 으로 인한 성능 저하를 유발한다. 프로세스 사이의 통신이 복잡하다. (IPC 통신을 사용) |
프로그램 디버깅이 어렵고 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 된다. |
멀티 프로세스의 예 : 구글 크롬
멀티 프로세스를 이용하기 때문에 여러 탭을 띄어 작업을 하더라도 한 탭에 문제가 생겼다고 구글 크롬이 전체가 종료되지 않습니다.
멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않아 여러 탭을 띄어 작업하더라도 모든 탭이 종료되지 않습니다.
멀티 스레드의 예 : 인터넷 익스플로어
인터넷 익스플로어로 여러 탭으로 검색을 하거나 작업을 하다가 갑자기 이런 문구가 뜬적 다들 예전에 있었을 겁니다.
이때 정말 난감해지는게 내가 힘들게 찾은 정보들이 브라우저가 종료되면서 다 날라가버립니다.
그 이유가 멀티 스레드의 특징인 스레드는 긴밀하게 연결되어 있기 때문에, 한 스레드 ( 한 탭 ) 에 문제가 생기면
전체 프로세스에 영향이 가기 때문입니다.
참고자료
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://cocoon1787.tistory.com/688
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
'◼ CS 기초 지식 > [운영체제]' 카테고리의 다른 글
프로세스와 스레드(process, thread)에 대해 알아보자. (0) | 2022.10.04 |
---|---|
[Linux] kernel(커널) 이란 ? 쉽게 알아보자 (1) | 2022.10.03 |
[Linux] Shell 이란 ? 쉽게 알아보자. (1) | 2022.10.01 |
Linux (리눅스) 란 ? (1) | 2022.10.01 |