컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU의 코어(core) 수와 같다.
만약 CPU의 코어 수보다 더 많은 스레드가 실행되면,
각 코어가 정해진 시간 동안 여러 작업을 번갈아가며 수행하게 된다.
이때 각 스레드가 서로 교체될 때 스레드 간의
문맥 교환(context switching)이라는 현상이 발생한다.
문맥 교환이란 현재까지의 작업 상태나
다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업을 가리킨다.
이러한 문맥 교환에 걸리는 시간이 커지면 커질수록,
멀티 스레딩의 효율은 저하된다.
오히려 많은 양의 단순한 계산은
싱글 스레드로 동작하는 것이 더 효율적일 수 있다.
따라서 많은 수의 스레드를 실행하는 것이
언제나 좋은 성능을 보이는 것은 아니라는 점을 유의해야 한다.
윈도우 서버계 OS는 개발 당초부터 멀티 스레드 처리에 대응하도록 디자인 되었다.
때문에 어떤 원인에 의해 어느 스레드가 CPU의 사용을 정지한 경우에는
그 동안 다른 처리에 CPU 사용권을 할당할 수 있기 때문에
컴퓨터 전체의 스루풋 (컴퓨터 내에서 일정 시간 내에 실행되는 처리 수)은 향상된다.
그러면 전혀 대기 상태 없이 스스로 종료하기 까지
CPU를 사용하는 스레드가 발생한 경우는 어떻게 될까?
그런 경우에 대비해서 일반적인 멀티 스레드 대응 OS에는
어느 스레드가 일정 시간 사용하면 강제적으로
다른 스레드에 CPU 사용권을 양보하는 장치가 구현되어 있다.
1. I/O 대기로 전환되는 스레드
1) 스레드 1이 CPU를 사용
2) 스레드가 I/O 대기 발생.
3) 스레드 1은 CPU 사용권을 스레드2에 넘긴다.
4) CPU는 효율적으로 계속 사용된다.
2. I/O 대기로 전환되지 않는 스레드
1) 스레드1이 CPU를 사용
2) 스레드가 I/O 대기 발생
3) 스레드1은 CPU 사용권을 넘기지 않는다.
4) CPU 사용권을 확보한 채 대기 상태가 되어 CPU의 효율적인 사용이 저해된다.
즉, 위의 그림의 결과를 보면 알 수 있듯이
CPU를 사용할 수 없는 스레드가 사용권을 양보하지 않으면
스르풋이 떨이지게되고 성능이 떨어지게 된다.
CPU 사용 시간의 계측에는 하드웨어의 타이머를 사용한다.
또한 스레드에 대해 1회당 할당되는 CPU의 사용 가능한 시간 단위를 타임 슬라이스 라고 한다.
이와 같이 멀티 스레드 OS의 CPU 상에서 실행되는 처리가
대기 상태가 되거나 타임 슬라이스의 상한으로 설정되어 있는 임계값에 달함에 따라
CPU의 사용권을 양보하고 다른 처리가 CPU로 실행되는 것을 문맥교환이라고 한다.
문맥교환이 발생하면 그때까지 CPU를 사용하던 처리 정보를
레지스터(CPU 내에 여러개 존재하고 연산 실행 또는 실행 상태 보존 등 몇가지의 용도에 상요되는 기억매체)
등에 보존할 필요가 있다.
또한 CPU 사용권을 얻었을 때는 보존된 전회(이전까지의) 사용 시까지의 정보를 로드할 필요가 있다.
이러한 본래 실행해야 할 처리 이외의 작업이 필요하기 때문에
문맥 교환은 부하가 걸리는 동작이라고 할 수 있다.
윈도우에서 이들 일련의 CPU 리소스 관리를 담당하고 있는 컴포넌트가 윈도우 스케줄러 이다.
1) CPU에서 스레드1의 처리 실행중
2) 문맥 교환 발생
3)스레드 1은 이번의 실행 정보를 보존
4) 스레드2는 전회 CPU 사용 시의 실행 정보를 로드
'컴퓨터 구조' 카테고리의 다른 글
RAID (0) | 2022.01.20 |
---|---|
OLTP 와 OLAP (0) | 2022.01.20 |
HDD 구조 (0) | 2022.01.13 |
싱글스레드와 멀티스레드 (Single Thread & Multi Thread) (0) | 2021.12.15 |
프로세스(Process) 와 쓰레드(Thread) 란? (0) | 2021.12.15 |