상세 컨텐츠

본문 제목

Thread -1(Thread vs Process)

운영체제

by AyaanDev 2022. 12. 28. 17:29

본문

반응형

쓰레드란?

Thread란 프로세스를 구성하는 실행의 흐름 단위를 말한다. 프로세스가 무엇을 말하는지 잘 모르는 경우 포스팅

프로세스-1을 참고하길 바란다.

https://ayaan-dev.tistory.com/2

 

프로세스 -1 (프로세스란)

프로세스란? 프로세스란 실행 중인 프로그램을 말한다. 프로그램은 실행되기 전 까지는 그저 보조기억장치에 있는 데이터 덩어리에 불과하다. 보조저장장치에 저장된 프로그램이 메모리에 적

ayaan-dev.tistory.com

 

하나의 프로세스는 여러 개의 스레드를 가질 수 있다. 스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있다.

워드 프로세스를 예시로 들어보자.

워드 프로세스가 단일 쓰레드로 구성되어 있다면 문자를 입력하면서 동시에 철자 검사를 실행할 수 없다. 워드 프로세스가 멀티 스레드로 구성되어 있다면 쓰레드 A는 유저가 입력하는 문자를 감지하여 화면에 띄워주고 쓰레드 B는 동시에 입력된 글들 중에 틀린 철자가 있는지를 지속적으로 판단하여 잘 못 되었다면 빨간색으로 밑줄을 그어주는 작업을 수행할 수 있다.

 

이러한 특징은 multi processor에서 더 큰 힘을 발휘한다. multi processor에서는 각각의 processor에 하나의 쓰레드가 할당될 수 있으므로 스레드가 병렬로 실행될 수 있게 된다. 스레드를 지원하는 시스템에서는 PCB에 스레드에 관한 정보를 포함하도록 확장된다.

 

쓰레드의 메모리 구조

쓰레드는 하나의 process에서 실행되는 작업의 실행단위다.

thread는 code,data.bss,heap은 공유하는 방면에 program counter를 비롯한 register값, 스택을 독립적으로 가지고 있기에 스레드마다 각기 다른 코드를 실행할 수 있다.

반면에 code,data,bss,heap영역과 입출력 FILE등은 공유하고 있는것을 위 그림을 통해 확인할 수 있다.

 

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

여러 프로세스를 동시에 실행하는 것을 멀티 프로세스라 하며 여러 스레드를 동시에 실행하는 것을 멀티 스레드라고 한다.

하나의 프로그램을 여러개 실행하여 멀티 프로세스로 작동 시키는것과 쓰레드를 분할하여 멀티 스레드로 작성시키는 것의 차이점을 이야기 해보자한다.

 

똑같이 1~100까지의 정수를 합하여 화면에 출력하는 프로세스를 생각해보자.

이를 멀티 프로세스로 실행 시킬 경우 독립된 메모리 공간에 여러번 코드가 적재된다.

메모리 공간의 크기가 1KB라면 1xN KB만큼의 메모리 공간을 차지하게 되는것이다.

반면 멀티 스레드의 경우 code,data,heap공간을 공유한다. 따라서 N개의 쓰레드가 같은 code와 data공간을 공유하므로 위에보다 적은 메모리공간에 같은 역할을 하는 서비스를 만들수 있게된다.

 

멀티 프로세스에 비해 멀티 스레드는 공유하는 자원덕분에 메모리 공간을 더 효율적으로 사용할 수 있다는 장점이 있다.

프로세스의 경우 서로 독립된 공간을 가지기 때문에 프로세스 끼리의 통신이 까다롭다. 기본적으로 프로세스는 서로의 독립된 공간을 참조할 수 없기 때문에 공유 메모리, pipe, socket 등의 IPC(프로세스간 통신)기법들을 선택하여 사용하여야한다. 반면에 스레드는 data영역을 공유하기 때문에 쓰레드 끼리의 통신에 유리하다.

 

워드 프로세스의 예시로 돌아가서 철자를 입력받아 화면에 띄우는 기능과 철자를 검사하는 기능이 독립된 프로세스로 이루어진다면 유저가 입력한 글자를 철자검사기 프로세스로 전달하는 통신기능이 필요하다. 또한 틀린 철자가 있을경우 이를 다시 어떤 철자가 틀렸는지를 전달해주어야 틀린 철자를 화면에 표시해줄 수 있다.

반면에 쓰레드로 이 기능이 구현되어있을경우 데이터를 공유하고 있으므로 쓰레드끼리 정보를 교환하는 오버헤드가 없어 훨씬 더 효율적인 서비스를 구현할 수 있다.

 

프로세스의 자원을 공유한다는 특성은 때론 단점이 될 수도 있는데, 멀티프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 지장이 비교적 적은 반면에 멀티 스레드 환경에서는 하나의 스레드에 문제가 생기면 프로세스 전체가 문제가 생길 수 있다.

 

스레드의 장점 정리

1. Responsiveness: 

대화형 응용을 다중 스레드화 하면 응용 프로그램의 일부분이 봉쇄되거나 응용 프로그램이 긴 작업을 수행하더라도 프로그램의 수행이 계속되는것을 허용함으로써, 사용자에 대한 응답성을 증가시킬 수 있다. 

 

2. Resource Sharing:

프로세스끼리 자원을 공유하기 위해서는 공유메모리, 메세지 전달과같은 통신기법을 사용하여야만 한다. 이러한 통신기법은 프로그래머에 의해 명시적으로 처리되어야 한다. 반면 스레드는 자원들과 메모리를 공유하므로 자원공유에 있어서 프로세스에 비해 유리하다.

 

3. Economy:

프로세스 생성을 위해 메모리와 자원을 할당하는것은 비용이 많이 든다. 반면 스레드는 생성에 드는비용이 프로세스에 비해 저렴하다. 또한 문맥교환에 드는 비용또한 대부분의 자원을 공유하고 있기 때문에 process->process끼리의 문맥교환보다 쓰레드끼리의 문맥교환 비용이 훨씬 저렴하다.

 

4. Scability:

다중 처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 수행될 수 있기 때문에 다중 처리기의 장점을 극대화 할 수 있다. 단일 쓰레드 구조에서는 남는 processor가 있어도 활용하지 못한다.

 

 

 

반응형

관련글 더보기

댓글 영역