주녁, DevNote
article thumbnail

지적과 댓글은 언제나 환영합니다!



들어가기에 앞서

 

프로세스(Process)쓰레드(Thread)의 차이를 설명하기에 앞서

프로그램(Program)의 정의를 짚고 넘어가자.

어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 
처리 방법과 순서를 기술한 일련의 명령문의 집합체.
(국어표준대사전)

 

그렇다. 프로그램은 명령문의 집합체이다.

코드의 덩어리일뿐 아직 실행되지 않은 상태이다.

이 상태를 정적(static)인 상태라고 한다.

 

반대로, 동적(Dynamic)인 상태도 있다.

실행시, 메모리에 프로그램이 적재되는 것을 동적인 상태라고 한다.

그리고 이렇게 동적인 상태에 있는 프로그램*프로세스라고 한다.

*P.S 스케줄러 입장에서는 작업(task)라고 부르기도 한다.

 


운영체제와 프로세스

 

프로세스는 프로그램이 메모리에 올라가 있는 상태이다.


프로그램이 메모리에 올라갈 때,

운영체제는 PCB(Process Control Block)라는

자료구조를 통해 프로세스를 제어한다.

 

운영체제는 하나의 CPU로 여러 개의 프로세스를 구동하기 위해,

일정한 CPU 시간 만큼 할당하여 여러 프로세스를 실행하는

시분할 방식을 사용한다.

 

이 때 프로세스를 전환하는 작업Context Switching이라고 하고,

PCB를 통해 상태를 저장하고 불러온다.

 


점점 더 커지는 프로그램의 크기

 

여기서 문제가 발생한다.

100만번의 요청을 프로세스 혼자 감당할 수 있을까?

 

혹시, 프로세스를 여러개로 늘리면 되지 않을까?

하는 생각을 했는가?

 

아쉽지만, 운영체제는 안정성을 위해서

프로세스에게 할당된 메모리에만 접근 하도록

제약을 두기 때문에 불가능한 일이다.

 

이러한 문제를 해결하기 위해 만들어진 개념이 있다.

프로세스의 메모리를 공유하는 더 작은 실행 단위, 쓰레드(Thread)이다.

 


쓰레드의 특징

 

응답성 향상

프로세스는 하나 이상의 쓰레드를 갖는다.

따라서, 어느 한 쓰레드가 대기중이어도

다른 쓰레드들은 작업을 계속 진행할 수 있다.

 

자원 공유

또한, 같은 프로세스 내의 쓰레드는 Heap 영역 내의 메모리를 공유한다.

*Stack 영역의 메모리는 각자 사용한다.

때문에, Context Switching 비용이

멀티 프로세스 환경보다 상대적으로 저렴하다.

 

쓰레드는 탁월한 기능을 가지고 있지만,

그만큼 주의할 점도 있다.

한 쓰레드가 문제가 생기면, 전체 프로세스에 영향을 준다.

그리고 같은 데이터에 접근할 때 생기는 *동시성 문제이다.

*이 문제는 다음 포스팅을 통해 확인하자.



마무리하며..

자, 이제 프로세스와 쓰레드의 차이를 설명할 수 있는가?

조금 더 공부가 필요하다면,

Interner Explorer와 Chrome의 동작방식에 대해 찾아보자.

 

출처

raejoonee님 블로그

kd4님 블로그

preamtree님 블로그

profile

주녁, DevNote

@junwork

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!