[ cs스터디 7/17 ] 프로세스와 스레드란 ?

inguk·2023년 7월 17일
0

CS스터디

목록 보기
2/4
post-custom-banner

cs면접이나 cs공부를 위해 방법을 찾던중 스터디에 가입하게 되었어요 !
강남역 근처 스터디룸에서 약 2시간가까이 진행했으며 스터디 진행방식이나 , 진도등의 협의가 끝난 후
공부해온것에 대한 발표로 마무리하기로 했습니다 !
취업준비기간을 한달로 잡은만큼 진도를 맞추기로 하였고 , 그날 그날 공부한 내역을
남겨보려고합니다 ! 오늘은 프로세스와 스레드에 대해서 공부했고 싱글스레드와 멀티스레드의
장단점까지 배워서 공유해봅니다 !

프로그램 → 프로세스 → 스레드

프로그램이란?

프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리가 할당되지 않은 정적인 상태 를 말한다.

**정적인 상태 : 아직 실행되지 않은 상태*

프로세스란?

프로세스는 프로그램 실행 시 , 메모리를 할당받아 작업이 실행된 동적인 상태를 말한다.

*동적인 *상태 : 프로그램이 실행된 상태*

스레드란?

스레드는 프로세스가 할당받은 메모리를 이용하는 실행 흐름의 단위이다

프로그램은 아직 실행되지 않은 파일 → 코드 덩어리

프로그램 실행 시 ,

해당 파일은 컴퓨터 메모리에 올라가게 되고, 동적인 상태가 되며 , 해당 상태를 프로세스 라고 한다.

프로세스에 정의는 실행되고 있는 컴퓨터 프로그램

스케줄링 단계 작업과 같은 의미

스레드의 등장

과거에는 프로그램을 실행 시 시작과 끝까지 프로세스 하나만을 사용해서 진행했다고 한다 → 프로그램이 복잡해짐에 따라 프로세스 하나만을 사용하는 것이 부담이 되었지만 운영체제는 안전성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고있기에 그래서 더 작은 실행 단위 개념이 필요하게 되었고, 이때 등장하게 된것이 바로 스레드다

스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.

스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되는 것이다.

프로그램이 코드 덩어리라면 , 스레드도 코드에 비유했을 때 스레드는 코드 내에 선언된 함수들이며, function Add(){} 또한 일종의 스레드라 볼 수 있다.

프로세스와 스레드의 작동 방식에 대한 더 자세한 설명

운영체제는 프로세스가 메모리에 올라갈 때, 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다.

각각의 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

이와 다르게 스레드는 같은 프로세스 내의 메모리를 서로 공유할 수 있다.

프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역을 따로 할당받고, 나머지 Code/Data/Head 형식으로 할당된 메모리 영역을 공유한다.

따라서 각각의 스레드는 별도의 스택을 가지고있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

프로세스와 스레드의 차이

프로세스는 메모리에 올라갈 때 운영체제로부터 독자적인 시스템 자원을 할당 받아 공유가 힘든 반면, 스레드는 프로세스 내부에서 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유한다.

싱글 스레드와 멀티 스레드

싱글 스레드

하나의 프로세스에서 하나의 스레드 실행

하나의 레지스터와 스택으로 표현.

싱글 스레드의 장점

자원 접근에 대한 동기화를 신경쓰지 않아도 된다.

여러개의 스레드가 공유된 자원을 사용할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근이 통제되어야 하며, 이 작업은 프로그래머에게 많은노력을 요구하고 많은 비용을 발생시킨다. 단일 스레드 모델에서는 이러한 작업이 필요하지 않다.

작업전환 작업을 요구하지 않는다.

작업전환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다.

따라서 단순히 CPU만을 사용하는 계산작업이라면, 멀티스레드보다 싱글스레드로 프로그래밍하는 것이 더 효율적이다. 그 이유는 스레드 간의 작업전환(context switching)에 시간이 걸리기 때문이다.

싱글 스레드의 단점

여러 개의 CPU를 활용하지 못한다.

프로세서를 최대한 활용하게 하려면 cluster 모듈을 사용하거나, 외부에서 여러 개의 프로그램 인스턴스를 실행시키는 방법을 사용해야 한다.

두 개의 작업을 하나의 스레드로 처리하는 경우와, 두 개의 스레드로 처리하는 경우를 가정했을 때, 후자의 경우는 짧은 시간 동안 2개의 스레드가 번갈아가면서 작업을 수행한다. 그래서 동시에 두 작업이 처리되는 것과 같이 느끼게 된다.

멀티 스레드

프로그램을 다수의 실행 단위로 나누어 실행.

프로세스 내에서 자원을 공유하여 자원 생성과 관리의 중복을 최소화

서버가 많은 요청을 효율적으로 수행할 수 있는 환경을 제공

각각의 스레드가 고유의 레지스터와 스택으로 표현됨.

멀티 스레드의 장점

새로운 프로세스를 생성하는 것보다 기존 프로세스에서 스레드를 생성하는 것이 빠르다.

프로세스의 자원과 상태를 공유하여 효율적으로 운영이 가능하다.

프로세스의 작업전환보다 스레드의 작업전환이 더 빠르다.

멀티 스레드의 단점

하나의 스레드만 실행중일 때는 실행시간이 오히려 지연될 수 있다.

멀티 스레딩을 위해 운영체제의 지원이 필요하다.

스레드 스케쥴링을 신경써야 한다

출처 : https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

이상입니다 !

profile
Frontend
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

정말 좋은 정보 감사합니다!

답글 달기