[CS공부] 프로세스와 쓰레드 정리

탄니야·2024년 7월 2일

cs공부

목록 보기
1/8

프로세스와 쓰레드의 차이

프로세스란 실행중인 프로그램을 의미합니다.
독립적이기 때문에 다른 프로세스와 데이터를 공유하지 않습니다.
쓰레드란 프로세스내부에 존재하는 작업단위 입니다.
쓰레드는 프로세스에 적어도 하나이상 존재하며 stack을 제외한 나머지 메모리영역을 공유하기 때문에 다른 쓰레드의 실행결과를 즉시 알 수 있습니다.

멀티프로세스와 멀티쓰레드의 특징

멀티프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지않고 계속 실행되지만 멀디쓰레드보다 많은 메모리공간을 차지합니다.
멀티쓰레드는 적은메모리공간을 차지않고 context swiching이 빠르지만 하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받습니다.

Context Swiching이란?

한 프로세스에서 다른 프로세스로 CPU의 제어권을 넘겨주는 과정을 의미합니다.
하나의 프로세스가 CPU를 사용하다가 다른 프로세스를 사용할 수 있도록 프로세스의 상태를 PCB에 저장하고 새로운 프로세스 상태를 CPU에 적재하는 것을 말합니다.
(PCB란?프로세스를 제어하기위해 프로세스 상태정보를 저장해놓는 구조체 입니다.)

멀티쓰레드의 동시성과 병렬성

동시성은 멀티작업을 위해 싱글코어에서 여러개의 쓰레드가 번갈아 실행한 것을 말합니다.
병렬성은 멀티코어에서 한개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것 입니다.
동시성은 논리적으로 동시에 수행될 수 있는 성질이며,
병렬성은 물리적으로 동시에 수행될 수 있는 성질을 가지고 있습니다.
(싱글코어라고해서 반드시 병렬성을 못갖는 것은 아님)

멀티쓰레드 환경에서 주의사항

여거래의 쓰레드가 공유데이터에 동시에 접근하는 경우 상호배제를 통해 동시성문제 또는 교착상태가 발생하지 않도록 주의해야합니다.
(교착 상태 방지: 여러 프로세스가 영원히 자원을 기다리는 상태에 빠지지 않도록 합니다.)

상호배제를 구현하는 방법

뮤텍스(Mutex): 상호배제를 구현하는 가장 기본적인 방법으로, 자원의 접근을 제어하기 위해 사용됩니다. 프로세스가 자원에 접근할 때는 뮤텍스를 잠그고, 접근이 끝나면 뮤텍스를 해제합니다.
세마포어(Semaphore): 자원의 접근을 카운팅하는 방식으로 제어하는 방법입니다. 특정 자원의 접근 가능한 프로세스 수를 제한하여 상호배제를 구현합니다.
모니터(Monitor): 상호배제를 보장하는 고수준의 동기화 메커니즘으로, 뮤텍스와 조건 변수를 결합한 형태입니다.

profile
반갑습니다

0개의 댓글