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. 자신들이 속한 프로세스의 메모리의 영역을 공유한다.
이 사진은 멀티스레드의 구조입니다. 이 구조도에서 말하고자 하는건 heap 메모리를 서로 공유한다는 걸 볼 수 있죠.
정리하자면 그렇게 보이는 것이 아닌 프로세스를 실질적으로 동시에 처리할 수 있게하기 위해 개발된 것이 쓰레드라는 것입니다. 또한 이 시기에 듀얼 코어가 개발 되었는데 이를 효과적으로 사용하기 위해서 쓰레드를 사용하게 되었다고 합니다.
헷갈릴 수 있는데 코어는 처리하는 일꾼의 수라고 생각하시면 편합니다. 듀얼코어는 일꾼이 두명인거죠. 한 개의 일이 있는데 일꾼이 두명입니다. 한명은 휴식하고 한명은 일하고 할 수 있지만 "백지장도 맞들면 낫다"는 말이 있듯이 같이 일하면 빨리 끝낼 수 있잖아요. 그래서 쓰레드를 활용해 이를 할 수 있게 만든거죠.
이번 게시글에는 쓰레드의 탄생 배경에 대해서 알아봤는데 다음 게시글에서 python에서 쓰레드 사용법에 대해 정리해 보겠습니다.
참고: 스레드 설명! 멀티프로그래밍 멀티태스킹 멀티스레딩 멀티프로세싱 차이 설명!| 작성자 쉬운코드
'코딩 > Python' 카테고리의 다른 글
[Python] .env 파일: 환경 변수 설정 및 사용 방법 (0) | 2023.10.12 |
---|---|
[python] Python Threading Module-Thread(2) (1) | 2022.08.22 |
댓글