Непредсказуемое поведение в многозадачных операционных системах

Одна из проблем вытесняющей многозадачности — непредсказуемость. Часто необходимо выполнить некоторую продолжительную во времени последовательность действи. Необязательно это несколько нажатий. Нажатие может быть и всего одно. Но произойти должно оно лишь после того, как я посмотрю, куда нажимать. Поэтому это всё равно получается продолжительная во времени последовательность действий: посмотреть — нажать.

И вот даже в этой простейшей последовательности может произойти сбой, если операционная система что-то сделает между этими событиями.

На самом деле речь идёт не только о современных многоядерных компьютерах с истинной многопроцессностью. Даже первые кнопочные мобильные телефоны, где сторонних приложений, да и операционных систем и многопоточности не было вообще, уже страдали таким: если кнопка блокировки клавиатуры совмещена с кнопкой отбоя входящего вызова, можно запросто не ответить, не желая того. Или, наоборот, если подсветка экрана, чтобы увидеть часы, совмещена с кнопкой поднятия трубки, можно ответить на нежелательный вызов.

Да что там телефоны! Пульт дистанционного управления центральным замком автомобиля — что может быть проще? Всего две кнопки: открыть и закрыть. Их можно нащупать пальцами в кармане. Связь односторонняя, ничто не может внезапно изменить состояние. Но даже тут возникает проблема: случайные нажатия. Я просто ношу ключ в кармане (разве не для этого он предназначен?). Я не нажимаю кнопки специально. Я ожидаю, что состояние замка машины будет неизменным. А он сам то открывается, то закрывается!

Но вернёмся к компьютерам. Интересно, что каждая отдельная программа непредсказуемым поведением, как правило, не страдает. Ну, разве что теперь при установке многих бесплатных программ нельзя просто несколько раз нажать «Далее», надо смотреть, чтобы не установился «Яндекс-браузер». Но это другая проблема, хотя и близкая.

А вот операционная система — казалось бы, программная основа, «скелет» компьютера; то, что должно быть образцом качества для других программ — вот именно это прежде всего и вносит непредсказуемость.

Типичная ситуация: я делаю что-то, и программа задумывается на некоторое время. Большее, чем я готов ждать. Это может быть загрузка «тяжёлой» веб-страницы; установка программы; открытие файла незапущенной «тяжёлой» программой («Офис», «Фотошоп», «Вижуал студия»); копирование — что угодно. Важно, что я не хочу ждать, и переключаюсь на другую программу. Делаю что-то в ней... А потом первая программа захватывает фокус! Да даже если я это вовремя заметил, то какое она имела право отвлекать меня? Ей что, мало мигания в панели задач? А если я не заметил вовремя, и, например, нажал «Enter», не успев прочитать, то я даже не знаю, к каким действиям это может привести. Хорошо, если просто закрытие сообщения об окончании установки. Или если можно нажать Ctrl+z. А если я согласился с перезагрузкой?

И, главное, непонятно, как с этим жить. Внимательно изучать экран перед каждым нажатием каждой клавиши? Скорость работы упадёт. Использовать компьютер в «однозадачном» режиме? Так его для этого ещё настроить надо! Ведь помимо явно запущенных программ есть ещё куча всякого в автозагрузке, что может проявить себя лишь когда найдёт обновления.

Но есть во всём этом хотя бы одна вещь, на которую я могу повлиять: не использовать многодокументные программы, которые закрываются с закрытием последнего документа. Например, веб-браузер «Гугл хром».

Дело вот в чём: открыто у меня куча документов. Они мне больше не нужны. Можно закрыть окно целиком. И в следующий раз они откроются снова (на самом деле нет: как раз «Хром» откроет пустую вкладку; но, если мне надо вернуться, достаточно нажать Ctrl+Shift+T). Чтобы такого не было, я закрываю документы по одному. Естественно, клавиатурой: мышка для ламеров. Естественно, не много раз нажимая Ctrl+W или Ctrl+F4, а зажав один раз, пока всё не закроется.

И тут 2 варианта: хорошие приложения закроют все вкладки, но не закроются сами. А плохие закроются. Фокус перейдёт на другую программу. И команды закрытия будут передаваться ей! Непредсказуемое поведение! В данном случае непредсказуемость состоит в том, что я не знаю, сколько именно времени надо первой программе, чтобы закрыться. Если бы знал, можно было бы именно в этот момент попытаться отпустить клавиатуру.

Поделиться
Отправить
 180   2017