728x90
프로세스는 실행 환경과 자원을 제공하는 컨테이너 역할을 하고, 실제 CPU를 사용해서 코드를 하나하나 실행하는 것은 스레드이다.

- 프로세스 A에 있는 스레드 A1을 실행한다.

- 프로세스A에 있는 스레드A1의 실행을 잠시 멈추고 프로세스B에 있는 스레드 B1을 실행한다.

- 프로세스B에 있는 스레드 B1의 실행을 잠시 멈추고 같은 프로세스의 스레드 B2를 실행한다.
- 이후에 프로세스A에 있는 스레드A1을 실행한다.
- 이 과정을 반복한다.
단일 코어 스케줄링
운영체제는 내부에 스케줄링 큐를 가지고 있고, 각각의 스레드는 스케줄링 큐에서 대기한다.

- 스레드A1, 스레드B1, 스레드B2가 스케줄링 큐에 대기한다.

- 운영체제는 스레드A1을 큐에서 꺼내고 CPU를 통해 실행한다.
- 이때 스레드A1이 프로그램의 코드를 수행하고, CPU를 통한 연산도 일어난다.

- 운영체제는 스레드A1을 잠시 멈추고, 스케줄링 큐에 다시 넣는다.

- 운영체제는 스레드B1을 큐에서 꺼내고 CPU를 통해 실행한다.
- 이런 과정을 반복해서 수행한다.
멀티 코어 스케줄링
CPU 코어가 2개 이상이면 한 번에 더 많은 스레드를 물리적으로 진짜 동시에 실행할 수 있다.

스레드A1, 스레드B1, 스레드B2가 스케줄링 큐에 대기한다.

- 스레드A1, 스레드B1을 병렬로 실행한다. 스레드B2는 스케줄링 큐에 대기한다.

- 스레드A1의 수행을 잠시 멈추고, 스레드A1을 스케줄링 큐에 다시 넣는다.

- 스케줄링 큐에 대기 중인 스레드B1을 CPU 코어1에서 실행한다.
- 물론 조금 있다가 CPU 코어2에서 실행중인 스레드B2도 수행을 멈추고, 스레드 스케줄링 큐에 있는 다른 스레드 가 실행 될 것이다
- 이런 과정을 반복해서 수행한다.
참고: CPU에 어떤 프로그램이 얼마만큼 실행될지는 운영체제가 결정하는데 이것을 스케줄링(Scheduling)이라 한다. 이때 단순히 시간으로만 작업을 분할하지는 않고, CPU를 최대한 활용할 수 있는 다양한 우선순위와 최적화 기법을 사용한다. 우리는 운영체제가 스케줄링을 수행하고, CPU를 최대한 사용하면서 작업이 골고루 수행될 수 있게 최적화한다는 정도로 이해하면 충분하다. 자세한 내용이 궁금한 분들은 운영체제 이론을 참고하자
728x90
'멀티스레드와 동시성' 카테고리의 다른 글
| Ch02. 스레드 생성과 실행 - 스레드 생성(Runnable) (0) | 2024.08.01 |
|---|---|
| Ch02. 스레드 생성과 실행 - 데몬 스레드 (0) | 2024.08.01 |
| Ch02. 스레드 생성과 실행 - 스레드 시작 (0) | 2024.07.23 |
| Ch01. 프로세스와 스레드 소개 - 프로세스와 스레드 (0) | 2024.07.17 |
| Ch01. 프로세스와 스레드 소개 - 멀티 Tasking과 멀티 Processing (0) | 2024.07.17 |