Алгоритмы для жизни: Простые способы принимать верные решения (Гриффитс, Кристиан) - страница 100

Внезапно «Марсопроходец» зафиксировал, что информационная шина не использовалась неприемлемо долго, и, не имея возможности обратиться за помощью, самостоятельно инициировал полную перезагрузку, что стоило миссии почти всего рабочего дня. Спустя день или больше все повторилось снова.

Лихорадочно работая, команда лаборатории в конце концов смогла воспроизвести и затем диагностировать такое поведение. Корнем зла оказалась классическая опасность планирования под названием «смена приоритетов». Происходит следующее: задача с низким приоритетом захватывает для работы системный ресурс (скажем, доступ к базе данных), но затем таймер прерывает работу задачи на середине, ставя ее на паузу, и активирует диспетчер системы. Диспетчер готов запустить задачу с высоким приоритетом, но не может, поскольку база данных занята. Таким образом, диспетчер опускается ниже по списку очередности задач, запуская различные незаблокированные задачи средней важности вместо того, чтобы запустить задачу с наивысшим приоритетом (которая заблокирована) или задачу с низким приоритетом, которая и блокирует работу (и которая оказалась в самом конце списка очередности после задач среднего приоритета). В таком кошмарном сценарии система может игнорировать задачу высшего приоритета очень долго[17].

Как только инженеры лаборатории выяснили, что проблема заключается в смене приоритетов, они написали код для решения проблемы и отправили его через миллионы миль «Марсопроходцу». Решением стало наследование приоритетов. Это означает, что если низкоприоритетная задача блокирует ресурс высокоприоритетной задачи, то низкоприоритетная задача должна немедленно «унаследовать» высокий приоритет той задачи, которую она блокирует.

Комик Митч Хедберг рассказывает такую историю: «Я был в казино, отдыхал, вдруг ко мне подошел парень и сказал: "Вы должны пересесть. Вы заблокировали пожарный выход". Можно подумать, что я не собирался бежать, если бы начался пожар». Аргумент сотрудника казино: это смена приоритетов. Контраргумент Хедберга: наследование приоритетов. Хедберг, развалившийся на стуле перед пытающейся спастись бегством толпой, мешкая, ставит свою низкоприоритетную задачу над высокоприоритетной задачей людей, намеренных спасти свою жизнь. Но все изменится, если он унаследует их приоритет (перед наступающей в панике толпой ее приоритет наследуется довольно быстро). Как говорит Хедберг, «если вы состоите из горючих материалов и у вас есть ноги, вы никогда не блокируете пожарный выход».

Мораль этой истории в том, что даже любви к решению задач иногда бывает недостаточно, чтобы избежать роковых ошибок в планировании. И даже любви к решению важных задач – тоже. Готовность крайне скрупулезно решать самый важный вопрос с привычной нам близорукостью может привести к тому, что весь мир называет прокрастинацией. Как в случае с застрявшим автомобилем: чем сильнее вы хотите выбраться, тем больше буксуете. По утверждению Гёте, «то, что значит больше, никогда не должно быть во власти того, что значит меньше». И хотя в этом есть определенная мудрость, иногда такое утверждение не совсем справедливо. Зачастую то, что значит для нас больше всего, не может быть сделано, пока не закончено самое незначительное дело. Поэтому единственный выход – это относиться к неважным вещам с той же важностью, как и к тем, выполнение которых они тормозят.