Page 31 -
P. 31
컨텍스트 스위치를 하는 데 연산량이 많다 보니, 동시에 실행해야 하는 스레드가 여럿이라 하더라
도 컨텍스트 스위치를 지나치게 자주 하면 배보다 배꼽이 더 커지기도 합니다. 그림 1-19와 같이
컨텍스트 스위치 구간이 너무 잦으면 정작 T1과 T2를 실행하는 데 할애되는 시간은 그만큼 적습 1
니다. 이는 비효율적이라고 할 수 있습니다. 멀티스레딩
그림 1-19 컨텍스트 스위치
<T1 Stack> <T2 Stack>
Func3 Func3
Func2 Func2
Func1 Func1
저장 복원
T1 스레드 컨텍스트 스위치 T2 스레드
컨텍스트 스위치를 자주 할수록 성능이 안 좋아진다고 하니, 그렇다면 컨텍스트 스위치를 최대
한 덜하면 되지 않을까요? 하지만 이것도 문제가 될 수 있습니다. 앞서 언급했던 ‘로딩 중에 애니
메이션을 뿌리는’ 경우를 봅시다. 컨텍스트 스위치가 어떤 스레드를 일시 정지하고 다시 컨텍스트
스위치로 실행을 마저 진행하는 데 걸리는 시간이 1초라면, 로딩 중에 애니메이션은 1초에 한 번
밖에 실행되지 못합니다. 사람 입장에서는 갑갑하겠죠.
그렇습니다. 컨텍스트 스위치 실행은 기본적으로 ‘사람 입장에서 쾌적할 수 있는’ 가급적 긴 시간
단위로 이루어집니다. 이 시간 단위를 타임 슬라이스(time slice)라고 합니다. 운영체제나 CPU 같은
환경에 따라 다르지만, 보통 스레드 하나가 일시 정지했다 다시 시작하는 데까지 걸리는 시간은
약 5밀리초입니다. 사람 입장에서는 갑갑함을 느끼지 않을 만큼 짧은 시간이지만, 컴퓨터 입장에
서는 초당 5억 개의 명령어를 처리할 수 있는 CPU라면 5억 5밀리초 = 250만 개의 명령어를 처
*
리할 수 있는 시간입니다. 충분히 긴 시간이죠.
CPU가 2개고 스레드가 2개면 어떻게 될까요? 이론적으로는 컨텍스트 스위치를 전혀 할 필요가
없습니다. 실제로는 다른 외부 요인들 때문에 컨텍스트 스위치가 발생하기는 해도요. 여기서 우리
가 알아야 할 점은 바로 CPU 개수와 스레드 개수의 관계입니다.
CPU 개수와 스레드 개수가 같거나 스레드 개수가 더 적으면 컨텍스트 스위치가 발생할 이유가
없습니다. 하지만 스레드 개수가 더 많으면 컨텍스트 스위치가 반드시 어느 CPU 안에서는 발생
합니다. 비둘기 집의 원리로 표현하자면, 비둘기 집 = CPU, 비둘기 = 스레드가 되겠습니다.
039