Process Vs Thread

임태영·2022년 3월 12일

운영체제

목록 보기
3/8
post-thumbnail

프로세스와 스레드

프로세스는 실행중인 프로그램을 뜻한다.
스레드는 프로세스안에서 CPU실행단위를 뜻한다.

프로세스는 최소한 하나의 스레드를 가지고 있다.
프로세스의 스레드가 1개라면 CPU 1개를 사용하고,
프로세스의 스레드가 여러개라면 CPU 여러개를 사용한다.
만약 스레드의 개수가 CPU보다 많다면 문맥교환(Context Switching)을 할 것이다.

우리가 공부를 한다면, 공부안에는 국, 영, 수등 여러 과목이 있을 것이다.
공부를 프로세스에 비유한다면, 국어공부, 영어공부, 수학공부를 스레드에 비유할 수 있다.

자원할당

스레드를 보면 프로세스안에 있는 작은 프로세스로 생각할 수 있다.
하지만 프로세스와 스레드를 구분한다는 것은 차이가 존재한다는 것이다.
대표적인 차이는 자원할당방식이다.


먼저 프로세스는 운영체제로부터 독립적인 자원을 할당받는다.
프로세스의 정보는 커널의 데이터영역에 PCB(Process control block)라는 자료구조에 저장된다.
프로세스는 다른 프로세스의 영역에 접근할 수 없다.

반면 스레드는 한 프로세스 내에서 data, code영역을 공유한다.
이는 스레드간에 자원을 공유한다는 의미다.
stack영역은 스레드간에 독립적인 실행흐름을 유지하기 위해 따로 할당받는다.
PCB에서는 각 스레드의 문맥(context)를 유지하기 위해 PC(Program conter), register만
따로 관리한다.

동기화

스레드는 자원을 공유한다.
따라서 데이터의 일관성을 깨뜨리는 경우가 발생할 수 있다.

반면 프로세스는 자원을 공유하지 않는다.
따라서 데이터의 일관성을 깨뜨리지 않는다.

스레드를 사용하는 경우에는 항상 동기화에 신경써야 한다.

주의) 여러 프로세스가 외부자원을 공유하는 경우 예를들어
하나의 DB를 여러 서버 프로세스에서 접근한다거나,
또는 인위적으로 내부자원을 공유하도록 시스템콜을 사용한다면,
이는 스레드와 마찬가지로 데이터의 일관성을 깨뜨리는 경우가 발생할 수 있다.
이 경우에는 스레드와 마찬가지로 공유되는 자원에 대한 동기화에 신경써야 한다.

멀티프로세스 vs 멀티스레드

멀티스레드는 사용자와 상호작용하는 프로그램을 만들 수 있다.
하나의 스레드가 자원을 요청한 후 block되었을 때,
다른 스레드로 사용자 이탈을 막는 작업을 할 수 있다.

또 자원을 공유하기 때문에, 같은 작업을 하는 여러 프로세스를 돌리는 것 보다
메모리를 절약할 수 있고, 빠른 문맥교환(Context Switching)을 할 수 있다.

반면에 자원을 공유하기 때문에 하나의 스레드에서 오류가 발생하면,
이는 프로세스 전체의 문제로 번지고, 프로세스가 강제로 종료된다.

또한 과도한 동기화처리는 프로세스 전체의 처리량 저하를 불러일으킬 수 있다.

멀티프로세스와 멀티스레드는 동시에 여러작업을 한다는 공통점이 있지만,
처리해야하는 작업의 특성을 고려하여 선택해야 한다.

참고자료
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
https://www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7

profile
나 스스로를 깊게 알고싶은 사람입니다.

0개의 댓글