더북(TheBook)

하지만 컴퓨터는 기계입니다. 사람처럼 머리가 돌아가지 않죠. 그래서 바보처럼 이쪽저쪽을 왔다 갔다 하면서 일을 합니다.

여러 프로세스와 여러 스레드를 동시에 실행해야 하는 운영체제는 이렇게 여러 프로세스와 각 프로세스 안에 있는 스레드들을 일정 시간마다 번갈아 가면서 실행합니다. 각 스레드를 실행하다 말고 다른 스레드를 마저 실행하는 과정을 컨텍스트 스위치(context switch)라고 합니다.

그런데 컨텍스트 스위치는 컴퓨터 입장에서도 별것 아닌 일이 아닙니다. 컨텍스트 스위치를 하는 과정에서 적지 않은 양의 연산이 발생합니다. 우선 실행 중이던 스레드의 상태(호출 스택 등)를 어딘가에 저장하고, 과거에 실행하다가 만 다른 스레드 중에서 하나를 고릅니다. 고른 스레드의 상태(호출 스택 등)를 복원하고, 그런 다음 실행하던 지점으로 강제 이동을 해야 합니다.

컨텍스트 스위치를 하는 데 연산량이 많다 보니, 동시에 실행해야 하는 스레드가 여럿이라 하더라도 컨텍스트 스위치를 지나치게 자주 하면 배보다 배꼽이 더 커지기도 합니다. 그림 1-19와 같이 컨텍스트 스위치 구간이 너무 잦으면 정작 T1과 T2를 실행하는 데 할애되는 시간은 그만큼 적습니다. 이는 비효율적이라고 할 수 있습니다.

▲ 그림 1-19 컨텍스트 스위치

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.