CS

[CS] 프로세스와 스레드

개발조무사 윤뚜비 2022. 12. 15. 03:16

 

프로세스와 스레드

프로세스와 스레드는 익숙한 단어지만 둘의 차이를 물어보면 선뜻 대답하기 쉽지 않다. 그래서 이번 기회에 정리해보고자 한다.

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




프로세스

결국 스레드는 프로세스 내부의 보다 작은 단위이다.

이게 무슨차이인지 알기 위해 우선 CPU와 OS의 관점의 차이를 이해해야한다.

CPU는 스레드를 작업의 최소 단위로 보고
OS는 프로세스를 작업의 최소단위로 본다.

 




프로세스는 운영체제로부터 메모리를 할당받아 프로그램을 실행해 왔지만 시간이 지남에따라

프로세스 하나로 처리하기엔 시스템이 복잡해지고 벅차게되었다.

 

프로세스를 여러개 만들어서 해결하면 안될까라는 생각이 들었지만

OS에서는 시스템의 안정성을 위해 프로세스마다 본인만의 메모리에만 접근 가능하도록 한다.



스레드



그래서 프로세스 보다 더 작은 실행단위의 개념이 필요했고 그래서 나온게 스레드다.

스레드의 특징은 위에서 언급한 문제때문에 나왔으니 예측했을 것 이다.

바로 스레드끼리의 자원은 공유가 가능하다는 점.

기존 프로세스는 각자의 고유 영역으로 사용했기에 서로 데이터 공유가 불가능했다.

하지만 위 사진 처럼 스레드는 각자의 스택만 고유하게 가지고 있고

같은 프로세스 내부에 있으므로 다른 스레드와 자원공유가 가능하다.

 

이렇게 장점을 정리하면 여러개의 작업을 병렬적으로 처리할 수 있고 그렇기에 개별 코드의 양은 적어질 수 있다.

또 같은 프로세스 내부에 있으므로 자원공유의 속도가 훨씬 높다.

하지만 스레드끼리 자원을 공유하기에 동기화 작업의 까다로움으로 설계에 노력이 더 필요하며

하나의 스레드가 문제가 생기면 전체 프로세스가 영향을 받는다.