Исследователи доказали, что дёрганье мышью на самом деле ускоряло работу в Windows 95

1 июля один из пользователей сайта вопросов и ответов Stack Exchange вспомнил о странном поведении Windows 95 при установке приложений. По его словам, процесс можно было ускорить, если перемещать курсор мыши по экрану, однако он не нашёл объяснений в интернете.

Пользователи Stack Exchange подтвердили правдивость воспоминаний user2652379. Они пояснили, что причина поведения системы крылась в её архитектуре.

В Windows 95 использовали приоритетную многозадачность: система сама принимала решения о переключении между задачами. При этом ОС обрабатывала события циклами: задачи ввода-вывода данных исполнялись сразу, а на фоновые задачи выделялось одинаковое количество времени — 15,6 миллисекунды.

Если программе нужно было, к примеру, скопировать файлы, система ставила запрос в очередь, ожидала наполнения буфера фоновыми задачами, и только после этого обрабатывала весь пакет. При этом пока задача находилась в режиме ожидания — приложение фактически не работало.

Двигая курсором мыши, пользователи заполняли буфер входящими событиями, заставляя систему перезапускать цикл. Это создавало эффект, что программа работает быстрее.

 

В качестве примера пользователи привели установку крупных программ, которую можно было сократить с часа до 15 минут, двигая мышкой. Также одним из самых известных примеров была утилита дефрагментации диска, которую тоже можно было ускорить перемещениями курсора.

Как предположили комментаторы, такое поведение системы было обусловлено совместимостью с низкопроизводительным оборудованием. По одной из версий, систему спроектировали с прицелом на максимальную отзывчивость, поэтому действия пользователя поднимают программу в приоритете.

Пользователь под псевдонимом Cody Gray пояснил, что странное поведение Windows 95 могло быть связано не с самой системой, а с неправильным использованием её особенностей разработчиками. Он сослался на статью разработчика Microsoft Рэймонда Чена, который описал распространённую ошибку вызова функции MsgWaitForMultipleObjects.

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

Как пояснили на Stack Exchange, подобная особенность встречалась только на Windows 95. В более поздних версиях системы архитектуру многозадачности изменили.