본 내용은 {파이썬 비동기 라이브러리 Asyncio} 라는 책의 소개 부분에 실려 있는 이야기다.
asyncio를 공부하는데 이해와 사용에 있어 많은 도움이 된다.
본인은 이 식당 이야기의 일부를 발췌해서 적겠다.
2051년 여러분은 식당을 운영하고 있다고 가정해보자. 로봇 노동자가 많아지며 경제의 많은 부분에서 자동화가 이루어졌지만, 사람들은 과거처럼 외식을 즐기고는 한다. 여러분의 식당은 종업원이 모두 인간형 로봇이다. 현재 로봇 생산에서 가장 성공적인 업체는 Threading이라는 회사로 이곳에서 생산한 로봇 노동자들은 ThreadBot이라고 불린다.
(중략)
시간이 흐르고… 어느 바쁜 금요일 밤, 여러분은 어떤 명백하고 특이한(singular) 순간을 맞이한다. 시간은 느려지고 정신은 맑아져 여러분은 식당이 시간의 흐름 속에 멈춰 있는 순간을 보게 된다. ThreadBot들이 아무런 업무도 하지 않고 있다. 명확히 말하면 아무것도 안 하는 것이 아니라 그냥 멈춰 있다.
WaitBot 3대는 각기 다른 테이블에서 손님들의 주문을 기다리고 있다. WineBot은 이미 17잔을 WaitBot이 가져가도록 준비해두고 새 주문을 기다리고 있다. GreetBot 1대는 새 손님을 맞이하며 자리가 날 때까지 잠시 기다리도록 안내한 뒤, 다른 안내할 손님을 기다리고 있다. 또다른 GreetBot 1대는 식사를 마친 다른 고객의 신용카드 결제를 처리하는 과정에서 신용카드 결제기의 응답을 기다리고 있다. ChefBot은 35개의 음식을 요리하던 중에 하나의 음식이 완료되길 기다리고 있다. 음식이 완료되면 접시에 담아 WaitBot이 가져갈 수 있도록 할 것이다.
식당이 ThreadBot들로 가득하고 여러가지 문제들이 있어도 더 고용할 생각이었다. 하지만 문득 현재 고용한 로봇들이 충분한 업무를 처리하고 있지 않음을 깨닫는다.
특이점은 지나갔으나 깨달음은 남아있다. 일요일이 되자 여러분은 ThreadBot들에 데이터 수집 모듈을 추가한다. 각 ThreadBot은 얼마나 기다리고 실제로 얼마나 일하는지 측정한다. 한 주 동안 데이터를 수집하고 일요일 저녁에 결과를 분석한다. 결과를 보니 식당이 만석인 시간에 가장 많은 업무를 처리한 ThreadBot조차 98%의 시간을 대기하고 있었다. ThreadBot들은 매우 효율적이라 어떤 업무든 수 초 내에 실행하고 나머지 시간은 모두 대기하고 있었다.
(후략)
이야기는 주인공이 LoopBot이란 새로운 봇 1대를 도입하고 ThreadBot 모두를 폐기하는 것으로 마무리된다. 그 LoopBot은 어떤 존재일까? 상술되었듯이 제일 바쁜 ThreadBot조차 98%의 시간을 낭비하고 있었다. 그렇게 되니 수많은 ThreadBot을 투입시킬 명분도 의미도 잃게 되는 것이다. LoopBot은 언제든지 호출하여 언제든지 해당하는 일을 수행할 수 있다. LoopBot은 각자의 영역이 아닌 다른 모든 영역을 수행할 수 있다. WaitBot의 역할, WineBot의 역할, GreetBot의 역할, ChefBot의 역할 모두가 LoopBot 혼자서 해결하게 된 것이다. 사정이 이렇게 되자 다른 식당들도 ThreadBot을 치워버리고 LoopBot 한 대로 모든 일을 처리하게 된다.