Неудивительно, что, поскольку исследователи и сами не вполне понимали, что делают, они столкнулись с препятствиями. И одно из них особенно привлекло внимание ученых. Как объяснял Деннинг, при определенных условиях неожиданная проблема «появляется, если вы добавите еще больше задач в эту многозадачную смесь. В некотором роде вы проходите через критический порог. Невозможно предсказать его появление, но вы сразу это поймете, когда внезапно система начнет умирать».
Снова представим жонглера. Пока один мяч находится в воздухе, у жонглера есть достаточно времени, чтобы подбросить вверх остальные. Но если жонглер берет еще один лишний мяч, с которым он уже не успевает справиться? Он уронит не этот мяч, он уронит все. Вся система в буквальном смысле слова рушится. Как комментировал такую ситуацию Деннинг, «присутствие одной лишней программы привело к полному краху работы системы… Очевидная разница между этими двумя случаями вначале заставляет игнорировать интуитивное ощущение, что по мере добавления новых программ в перегруженную основную память начинается постепенная деградация деятельности компьютера». А вместо этого происходит катастрофа.
И если в случае с жонглером мы понимаем, что он просто не рассчитал силы и не справился, что может стать причиной такого финала для машины?
Здесь теория планирования пересекается с теорией кеширования. Вся суть кеша заключается в том, чтобы держать рабочий набор необходимых элементов в свободном доступе. Один из способов – хранить информацию, которую в данный момент использует компьютер, в быстрой памяти, а не на медленном винчестере. Но, если задаче требуется держать в поле зрения так много нюансов, что эта информация уже не помещается в объеме быстрой памяти, компьютеру приходится постоянно подкачивать данные в память и отправлять обратно на винчестер, вместо того чтобы выполнять реальную работу. Более того, когда вы переключаетесь между задачами, новое активное задание может пытаться освободить место для своего рабочего набора, вытесняя сегменты других рабочих наборов из памяти. Следующее задание, активированное вновь, будет снова возвращать части своего рабочего набора с жесткого диска и заталкивать их обратно в память, занимая места других наборов. Такая ситуация – когда задачи крадут место друг у друга – может и дальше усугубляться в системах, где существует иерархия кеша между процессором и памятью. По словам Питера Зилистра, одного из разработчиков диспетчера операционной системы Linux, «кеши уже достаточно разогреты для текущей загрузки, и, когда вы переключаетесь с задачи на задачу, вы в значительной мере лишаете сил все кеши. И это больно». В крайнем случае программа может работать