멀티 스레드를 이해하기 위해 멀티 태스킹과 프로세스 같은 운영체제 기본 개념들을 알아야한다. 멀티 스레드 이해를 위한 핵심 내용만 살펴보자.
1) 단일 프로그램 실행
ex) 프로그램 2개 이상을 동시에 실행했다. 음악을 들으면서, 문서를 작성하는 것이다. 이 때 연산을 처리할 수 있는 CPU 코어는 1개만 있다.
- 프로그램의 실행이란 프로그램 코드를 순서대로 CPU에서 연산(실행)하는 일이다.
- 여기서 CPU 코어는 하나이므로 한 번에 하나의 프로그램 코드만 실행할 수 있다.
- 만약 하나의 프로그램 안에 있는 코드를 모두 읽은 후에야 다른 프로그램의 코드를 실행할 수 있다면 사용자는 답답함을 느낀다.
- 실제로 초창기 컴퓨터는 이렇게 실행했다.
- 이를 해결하기 위해 CPU 코어로 여러 프로그램을 동시에 실행하는 '멀티태스킹' 기술이 등장했다.
2) 멀티스태킹이란
순서대로 촬영한 연속된 사진을 빠르게 보여줄 경우 영상으로 인지된다. 예를들어 애미메이션의 경우 1초에 30~60장의 사진이 지나간다. 현대의 CPU는 초당 수십억 번 이상의 연산을 수행한다. 쉽게 말해 초당 수십억 장의 사진이 빠르게 교차되는 것이다.
만약 CPU가 두 프로그램의 코드를 벌갈아 수행한다면, 사람 은 두 프로그램이 동시에 실행되는 것 처럼 느껴질 것이다.
(대략 0.01 (10ms) 단위로 돌아가며 실행한다.)
프로그램 A, B를 각각 교차로 0.01초 정도 수행하다가 잠시 멈추고 실행하는 과정을 반복한다.
이렇게 각 프로그램의 실행 시간을 분할해서 동시에 실행되는 것 처럼 하는 기법을 시분할(Time Sharing, 시간 공유) 기법이라 한다. 이 방식을 사용하면 CPU 코어가 하나만 있어도 여러 프로그램이 동시에 실행되는 것 처럼 느낄 수 있다.
그리고 이렇게 하나의 컴퓨터 시스템이 동시에 여러 작업을 수행하는 능력을 멀티태스킹이라 한다.
초당 수십억 번 이상의 연산을 하는 것이니 프로그램 하나당 0.01초 동안 실행될 때 코드를 수만, 수십만번 수행하며 번갈아 가는 것이다.
참고)
CPU에 어떤 프로그램이 얼마만큼 실행될지는 운영체제가 결정한다. 이를 스케줄링(Scheduling)이라 한다. 단순히 시간으로만 작업을 분할하지 않고, CPU를 최대한 활용할 수 있는 다양한 우선순위와 최적화 기법을 사용한다.
운영체제가 스케줄링을 하고, CPU를 최대한 사용하면서 작업이 골고루 수행될 수 있게 최적화한다는 정도로만 이해하자.
3) 멀티프로세싱이란
CPU 코어가 둘 이상이면 어떻게 될까?
프로그램은 3가지이고, CPU 코어는 2개면 어떻게 될까?
참고)
CPU 안에는 연산을 처리할 수 있 는 코어라는 것이 있다. 과거엔 하나의 CPU 안에 하나의 코어만 있었다. 그래서 CPU와 코어를 따로 분리해서 이야기하지 않았다. 최근에는 하나의 CPU 안에 2개 이상의 코어가 들어있다.
CPU 코어들은 프로그램A와 B를 실행하다가 멈추고, 프로그램 C와 A를 수행한다. 이런식으로 코어가 2개여도 2개보다 더 많은 프로그램을 실행할 수 있다.
멀티프로세싱은 컴퓨터 시스템에서 둘 이상의 프로세서(CPU 코어)를 사용하여 여러 작업을 동시에 처리하는 기술을 의미한다. 멀티프로세싱 시스템은 하나의 CPU 코어만을 사용하는 시스템보다 동시에 더 많은 작업을 처리할 수 있다.
4) 멀티프로세싱 vs 멀티태스킹
멀티 프로세싱은 하드웨어 장비 관점이고, 멀티 태스킹은 운영체제 소프트웨어의 관점이다.
멀티 프로세싱 | 멀티 태스킹 |
여러 CPU (CPU 코어)를 사용하여 동시에 여러 작업을 수행하는 것을 의미 | 단일 CPU(CPU 코어)가 여러 작업을 동시에 수행하는 것처럼 보이게 하는 것을 의미 |
하드웨어 기반으로 성능 향상 | 소프트웨어 기반으로 CPU 시간을 분할하여 각 작업에 할당 |
예) 다중 코어 프롯헤서를 사용하는 현대 컴퓨터 시스템 | 예) 현대 운영 체제에서 여러 애플리케이션이 동시에 실행되는 환경 |
참고)
그림 3의 예시는 여러 CPU 코어를 사용하기 때문에 멀티프로세싱이다. 동시에 각각의 단일 CPU 코어에 여러 작업을 분할해서 수행하기 때문에 멀티태스킹이다.
...
참고)
인프런, 김영한의 실전 자바 - 고급 1편
'개발(ETC)' 카테고리의 다른 글
프로세스와 스레드 (0) | 2024.07.17 |
---|---|
애자일(Agile) 이란 (1) | 2022.07.15 |
대용량 웹 서비스를 위한 마이크로 서비스 아키텍쳐(MSA)의 이해 (0) | 2022.07.01 |
Blocking, Non-blocking, Sync, Async (0) | 2022.05.09 |