IT/etc

[OS]프로세스와 스레드의 차이

음료요정 2021. 7. 12. 21:39

 

 

기술면접의 단골 질문인 쓰레드와 프로세스의 차이를 기술하려고 한다

 

 

프로세스와 스레드의 정의 

- 프로그램 : 프로그램이란 파일이 저장장치에 저장되어있지만 메모리에는 올라가 있지 않은 정적인(실행되지 않은) 코드덩어리를 말한다.

- 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위

- 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행흐름의 단위

 

 

운영체제는 안정성을 위해 한 프로그램에서는 한가지 프로세스만 메모리내에 접근할 수 있도록 제약을 두고있고, 이로인해 프로세스보다 더 작은 실행 단위개념이 필요하게 되었다. 이것이 쓰레드이다. CPU 입장에서의 최소 작업단위가 된다. 

쓰레드는 프로세스 특성의 한계를 해결하기 위해 만들어진 개념이기때문에 쓰레드의 특성은 다음과 같다.

쓰레드는 프로세스와 다르게 쓰레드간 메모리를 공유할 수 있다. 쓰레드끼리 프로세스의 자원을 공유하며 프로세스의 일부 흐름이 되는 것이다. 

 

 

 

- 멀티쓰레드 

하나의 프로세스는 하나이상의 쓰레드를 가지게 된다. 

(장점) 쓰레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하여 메모리 자원을 아낄 수 있으며 응답이 빠르다. 

(단점) 자원을 공유하기 때문에 동기화 문제가 발생할수밖에 없다. Synchronization Issue ! 

 

A쓰레드가 자원을 사용하다가 B 쓰레드로 넘어갔다가 다시 A 쓰레드가 해당 자원을 접근해 수정하는 경우 접근을 하지못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.