[OS] 프로세스와 스레드

토끼는 개발개발·2022년 2월 5일
0

OS

목록 보기
1/1
post-thumbnail

📌 프로세스와 스레드의 정의

프로세스: 운영체제로부터 자원을 할당받은 작업의 단위.
스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.

정의만으로는 이 차이를 이해하기 어려울 수 있다.
프로세스는 '작업의 단위'이며, 스레드는 '실행 흐름의 단위'라는 정도로 이해하고, 포스팅을 다 읽고 돌아와서 다시 읽어보자.



✏️ 프로그램, 프로세스, 스레드

프로세스와 스레드의 차이를 알기 위해서는 프로그램, 프로세스, 스레드 개념이 필요하다.


▶ 프로그램

프로그램이란, 프로그래밍의 결과물로 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 '코드 집합체'이다.

▶ 프로세스

프로세스란, 간단히 말해서 '실행 중인 프로그램'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다.

▶ 스레드

스레드란, 프로세스의 자원을 이용해서 실제로 작업을 수행하는 '실행 흐름 단위'이다.
스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다



쉽게 풀어보면, 프로세스는 '공장'이고, 스레드는 공장에서 작업을 수행하는 '일꾼'이다.

1. 프로그램을 실행시키면
2. 운영체제는 실행에 필요한 자원(메모리)을 할당하고
3. 할당된 프로세스의 자원을 이용해서 하나 이상의 스레드가 작업을 수행한다.




✏️ 멀티프로세스와 멀티스레드


▶ 멀티프로세스

하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

멀티프로세스의 장점

멀티프로세스의 장점은 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는 것이다. 스레드는 경우가 다르다. 스레드는 Code, Data, Heap 영역을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생하면 같은 프로세스 내의 다른 스레드 모두가 강제 종료된다.

멀티프로세스의 단점

멀티프로세스의 단점은 Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다. 또한, 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.


▶ 멀티스레드

싱글스레드 : 하나의 스레드 (자원 + 스레드)
멀티스레드 : 둘 이상의 스레드 (자원 + 스레드+ 스레드+ ...)

하나의 프로세스가 가질 수 있는 스레드의 개수는 제한되어 있지 않으나 스레드가 작업 을 수행하는데 개별적인 메모리 공간(호출스택)을 필요로 하기 때문에 프로세스의 메모리 한계에 따라 생성할 수 있는 스레드의 수가 결정된다. 멀티스레드는 둘 이상의 스레드를 가진 프로세스를 말한다.

멀티스레드의 장점

  • CPU의 사용률을 향상시킨다.
  • 자원을 보다 효율적으로 사용할 수 있다.
  • 사용자에 대한 응답성이 향상된다.
  • 작업이 분리되어 코드가 간결해진다.

멀티프로세스와 멀티스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다.
하지만 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 또한 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

멀티스레드의 다른 장점은 CPU가 여러 개일 경우에 각각의 CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높일 수 있다는 것이다. 이러한 시스템에서는 여러 스레드가 실제 시간상으로 동시에 수행될 수 있기 때문이다.


멀티스레드의 단점

멀티스레드의 단점에는 각각의 스레드 중 어떤 것이 먼저 실행될지 그 순서를 알 수 없다는 것이 있다. 또한 스레드의 실행 조건에 따라 결과가 다르게 나오므로, 오류가 발생했을 때 원인을 찾기가 힘들다.
이러한 문제를 경쟁 조건이라고 하며, 문제를 막기 위해 세마포어와 같은 방법을 통해 공유 데이터에 접근하는 스레드의 개수를 한개 이하로 유지하는 방법을 사용할 수 있다.




✏️ 멀티 프로세스 대신 멀티 스레드를 사용하는 이유?

자원 효율성, 처리 비용 감소 및 응답 시간 단축 등을 위해 여러 개의 프로그램을 켜는 것이 아니라 하나의 프로그램 안에서 여러 작업을 해결하는 것이다.




References

자바의 정석(저자: 남궁성) p722-723
https://ko.wikipedia.org/wiki/스레드_(컴퓨팅)
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

profile
하이 이것은 나의 깨지고 부서지는 샏 스토리입니다

0개의 댓글