Существует множество других случаев, когда такие подходы напрашиваются сами. Рассмотрим для примера политику ресторана по рассадке своих посетителей. Некоторые рестораны проводят политику открытого размещения, при которой посетители ждут поблизости, пока не освободится стол, и тогда его занимает первый из очереди. Другие рестораны спросят ваше имя, пригласят выпить в баре и уведомят вас, когда стол освободится. Эти подходы к управлению общедоступными, но дефицитными ресурсами прекрасно отображают различие между прокруткой и блокировкой в работе компьютера.
Если обрабатываемый поток запрашивает ресурс и не может получить его, то компьютер может либо разрешить этому потоку крутиться дальше, то есть продолжать проверку доступности, бегая по кругу и непрерывно спрашивая, доступен ли ресурс, либо блокировать доступ, то есть приостановить этот поток, выполнить другую задачу и потом вновь вернуться к первому потоку, делая это всякий раз, когда ресурс становится свободным. Для ученого-компьютерщика это реальный компромисс; выбор подхода определяется сравнением времени, затрачиваемого на постоянные запросы, и времени, теряемого на контекстные переключения. Но в ресторане не все ресурсы, к которым обращаются посетители, являются собственностью ресторана. Для ресторана подход «крутиться» помогает быстрее заполнить пустые столы, но для процессора, который, между прочим, больше изнашивается в таком режиме, это означает попадание в утомительную ловушку, в которой надо все время держать ухо востро и не терять бдительности.
В качестве параллельного примера рассмотрим вычислительную задачу, имеющую отношение к автобусной остановке. Если на остановке висит информационное табло, показывающее, что следующий автобус прибывает через 10 минут, то вы, скорее всего, примете решение, что его стоит подождать, чем – при отсутствии табло – захотите вновь и вновь принимать решение о том, стоит ли его ждать, рассматривая процесс неприбытия автобуса как поток косвенных данных о текущей ситуации. При этом все эти 10 минут вы можете время от времени бросать взгляд на дорогу («кручение»). (В случае городов, которые не оборудованы устройствами для информирования о предстоящем приезде автобуса, мы видели, что байесовский вывод может быть полезной альтернативой, если знать время отправления предыдущего автобуса.) Такие хитрые действия для упрощения расчетов могут значительно облегчить жизнь пассажиров.
Если мы можем быть добрее к другим, мы также можем быть более великодушными и к себе. И речь не только о простоте вычислений; все алгоритмы и идеи, которые мы обсуждали, смогут нам в этом помочь.