본문 바로가기
코딩/Python

[python] Thread(스레드)란 무엇인가?-Thread(1)

by 컴공돌멩이 2022. 7. 14.
728x90

Thread


프로그램 vs 프로세스

프로그램
    컴퓨터가 실행할 수 있는 명령어들의 집합
프로세스
    컴퓨터에서 실행중인 프로그램
    각각의 프로세스는 독립된 메모리 공간을 할당 받음

설명에 앞서 두 단어의 차이를 알아야 하는데요.

프로그램과 프로세스의 차이는 실행중인지 여부에 있어요.

 

이제 초기 컴퓨터는 어떻게 실행이 되는지 천천히 알아가 볼게요

단일 프로세스 시스템(Single Process System)
    한 번에 하나의 프로그램만 실행됨

초기 컴퓨터는 하나의 한 프로그램만 실행할 수 있었습니다.

즉, 웹 서핑을 하면서 다운로드를 하면 다운로드가 끝날 때 까지 웹 서핑을 못하게 되는 형태인거죠

 

이러한 단점을 보안하고자 멀티프로그래밍이 개발되었습니다.

멀티 프로그래밍(Multiprogramming)
    여러 개의 프로그램을 메모리에 올려 놓고 동시에 실행하는 방법
    I/O 작업이 발생하면 다른 프로세스가 CPU에서 실행됨

멀티 프로그래밍은 여러 개을 일단 메모리에 올려 놓고 대기 작업에 들어가면 다른 프로세스가 실행되는 방법입니다.

즉, 웹 서핑을 하면서 다운로드를 하면 다운로드 중 대기상태가 들어 갈 때 웹 서핑 연산을 하는 식으로 번갈아 가면서 처리할 수 있게 되었죠

하지만 다운로드가 길어지면 웹 서핑을 못한다는 단점은 극복하지 못했습니다.

 

이 단점을 해결하기 위해 멀티태스킹 방법이 개발되었습니다.

멀티태스킹(Multitasking)
    프로세스는 한번 CPU를 사용할 때 아주 짧은 시간만 CPU에서 실행되도록 하는 방법

여기서 아주 짧은 시간은 Quantum시간을 의미하는데 이 Quantum 보통 10ms~100ms 시간입니다.

이런 아주 짧은 시간동안 몇개의 프로세스를 번갈아가며 사용하는 방법입니다.

이 방법은 멀티 프로그래밍 방법과 크게 다르지 않지만 동시에 처리하는 것 처럼 보이는게 목적입니다. 

 

흔히 우리가 "멀티가 안되는 사람"이라고 표현을 하는데 이 때 멀티가 멀티태스킹을 줄임말입니다.

즉, 이 멀티가 되는 사람 안되는 사람의 구분도 동시에 여러 일을 처리할 수 있는지를 표현하는데 이와 동일한 샘이죠.

만약 밥을 먹으면서 무도를 본다고 가정을 하면 멀티태스킹 방법은 "밥을 본다"-"무도를 본다"-"밥 숟가락을 든다"-"무도를 본다"-"밥을 뜬다"-"무도를 본다" 이런식으로 뇌(CPU)를 사용한다는 거죠.

 

이는 아직 실질적인 단점을 해결한 방법은 아닙니다.

- 하나의 프로세스가 동시에 여러 작업을 수행하지 못함
- 프로세스의 컨텍스트 스위칭(다른 프로세스를 처리하기 위해 바꾸는 작업)은 무거운 작업
- 프로세스끼리 데이터 공유가 까다로움
- 듀얼 코어의 등장

아직 위와 같은 방법이 해결되지 않았죠. 이를 해결하기 위해 등장한 것이 바로 쓰레드입니다.

 

쓰레드의 특징으로는

1. 프로세스는 한 개 이상의 스레드를 가질 수 있다.
2. CPU에서 실행되는 단위(unit of execution) 이다.
3. 같은 프로세스의 스레드들끼리는 컨텍스트 스위칭이 가볍다.
4. 자신들이 속한 프로세스의 메모리의 영역을 공유한다.

 

이미지 출처 : https://slideplayer.com/slide/12698810/

이 사진은 멀티스레드의 구조입니다. 이 구조도에서 말하고자 하는건 heap 메모리를 서로 공유한다는 걸 볼 수 있죠.

 

정리하자면 그렇게 보이는 것이 아닌 프로세스를 실질적으로 동시에 처리할 수 있게하기 위해 개발된 것이 쓰레드라는 것입니다. 또한 이 시기에 듀얼 코어가 개발 되었는데 이를 효과적으로 사용하기 위해서 쓰레드를 사용하게 되었다고 합니다.

 

헷갈릴 수 있는데 코어는 처리하는 일꾼의 수라고 생각하시면 편합니다. 듀얼코어는 일꾼이 두명인거죠. 한 개의 일이 있는데 일꾼이 두명입니다. 한명은 휴식하고 한명은 일하고 할 수 있지만 "백지장도 맞들면 낫다"는 말이 있듯이 같이 일하면 빨리 끝낼 수 있잖아요. 그래서 쓰레드를 활용해 이를 할 수 있게 만든거죠.

 

이번 게시글에는 쓰레드의 탄생 배경에 대해서 알아봤는데 다음 게시글에서 python에서 쓰레드 사용법에 대해 정리해 보겠습니다.

 

 

참고: 스레드 설명! 멀티프로그래밍 멀티태스킹 멀티스레딩 멀티프로세싱 차이 설명!| 작성자 쉬운코드

 

누르면 오픈채팅방으로 이동합니다.

728x90

댓글