Page 30 -
P. 30
1.4 스레드 정체 GAM E SE RVER
CPU가 하나만 있는 기기라고 가정합시다. CPU는 하나인데 어떻게 여러 프로그램이 동시에 실
행될 수 있을까요? 아니, 어떻게 여러 프로세스나 여러 스레드가 동시에 실행될 수 있을까요?
예를 들어 보겠습니다. 공장에서 일하는 어떤 사람이 있습니다. 이쪽에서 나사를 조이고 저쪽에서
페인트칠을 해야 합니다. 그리고 상사는 그 사람에게 “두 가지 일을 동시에 하라.”라고 시켰습니
다. 나사를 조이는 장소와 페인트를 칠하는 장소는 10m 정도 떨어져 있습니다.
그림 1-18 두 가지 일을 동시에 하라고 지시
10m
사람들은 보통 이러한 경우 두 일을 정말로 동시에 하지는 않습니다. 먼저 한쪽 일을 다 마친 후
나머지 일을 하기 마련입니다. 일하는 장소 사이에 10m나 떨어져 있으니 말입니다. 10m 이동을
할 때는 한쪽 일이 다 끝나고 나머지 한쪽 일이 남아 있을 때뿐이겠죠.
하지만 컴퓨터는 기계입니다. 사람처럼 머리가 돌아가지 않죠. 그래서 바보처럼 이쪽저쪽을 왔다
갔다 하면서 일을 합니다.
여러 프로세스와 여러 스레드를 동시에 실행해야 하는 운영체제는 이렇게 여러 프로세스와 각 프
로세스 안에 있는 스레드들을 일정 시간마다 번갈아 가면서 실행합니다. 각 스레드를 실행하다 말
고 다른 스레드를 마저 실행하는 과정을 컨텍스트 스위치(context switch)라고 합니다.
그런데 컨텍스트 스위치는 컴퓨터 입장에서도 별것 아닌 일이 아닙니다. 컨텍스트 스위치를 하는
과정에서 적지 않은 양의 연산이 발생합니다. 우선 실행 중이던 스레드의 상태(호출 스택 등)를 어
딘가에 저장하고, 과거에 실행하다가 만 다른 스레드 중에서 하나를 고릅니다. 고른 스레드의 상
태(호출 스택 등)를 복원하고, 그런 다음 실행하던 지점으로 강제 이동을 해야 합니다.
038