누구를 먼저 부를까
자리는 하나, 기다리는 일은 여럿. 부르는 순서가 기다림을 바꿔요.
누구를 먼저 부를까요
창구는 하나인데 기다리는 사람이 여럿이에요.
한 번에 한 명만 부를 수 있으니, 누구를 먼저 부를지 정해야 해요. 먼저 온 사람? 볼일이 빨리 끝날 사람? 급한 사람?
이 "부르는 순서를 정하는 일"이 스케줄링이에요. CPU 앞에도 일들이 줄을 서 있고, 누구를 먼저 처리할지 누군가 정해줘야 해요.
자리는 하나, 기다리는 일은 여럿. 부르는 순서를 정한다.
스케줄링은 기다리는 일들 중 누구를 먼저 처리할지 정하는 거예요.
순서를 바꾸면 기다림도 바뀌어요
똑같은 손님 셋이 있어요. 한 명은 일이 길고, 둘은 짧아요.
위쪽은 온 순서대로 불러요. 긴 일이 맨 앞이면, 뒤의 짧은 둘은 그게 끝날 때까지 한참 기다려요. 아래쪽은 짧은 일을 먼저 불러요. 짧은 둘이 금방 끝나고, 긴 하나만 남아요.
손님도 일도 똑같은데, 순서만 바꿨더니 다들 기다린 시간의 평균이 달라졌어요.
같은 셋이라도 부르는 순서에 따라 평균 기다림이 달라진다.
일의 양이 같아도, 순서를 바꾸면 평균 기다리는 시간이 달라져요.
직접 순서를 정해 봐요
손님 넷이 기다려요. 저마다 일의 길이가 달라요.
누구를 먼저 부를지 순서를 바꿔 보면, 아래에 모두가 기다린 시간의 평균이 바로 나와요.
짧은 일을 앞에 두면 평균이 줄고, 긴 일을 앞에 두면 평균이 늘어요. 직접 이리저리 바꾸면서, 어떤 순서가 평균을 가장 줄이는지 찾아봐요.
순서를 바꿔가며 평균 기다림이 어떻게 변하는지 봐요.
짧은 일을 앞세우면 평균 기다림이 줄지만, 그게 늘 정답은 아니에요.
빠른 게 늘 좋은 건 아니에요
짧은 일만 계속 먼저 부르면 평균은 줄어요. 그런데 일이 아주 긴 손님은 자기 차례가 계속 밀려서 한없이 기다릴 수도 있어요.
그래서 다른 방법도 있어요. 한 명에게 몰아주지 않고, 모두에게 조금씩 번갈아 기회를 주는 거예요. 아무도 끝없이 밀리지 않아요.
대신 자주 번갈면 그만큼 자리를 바꾸는 비용이 들어요. 빠름을 택할지, 공평함을 택할지, 공짜인 선택은 없어요.
짧은 일 우선은 빠르지만, 긴 일이 계속 밀릴 수 있다.
평균을 줄이는 빠름과 아무도 안 밀리는 공평함은 서로 맞바꿔야 해요.
한 장으로 정리해요
셋만 기억하면 돼요.
첫째, 스케줄링은 부르는 순서를 정하는 일이에요. 자리는 하나고 기다리는 일은 여럿이니까요.
둘째, 순서를 바꾸면 평균 기다림이 바뀌어요. 짧은 일을 앞세우면 평균이 줄어요. 셋째, 그래도 정답은 하나가 아니에요. 빠름과 공평함은 맞바꿔야 하고, 자주 번갈면 바꾸는 비용도 들어요.
순서가 평균을 바꾸고, 빠름과 공평함은 맞바꾼다.