2019年07月04日 21時00分 ソフトウェア

Windows 95ではマウスカーソルをぐるぐると動かすと処理速度が早くなることがあった

by Marcin Wichary



1995年にリリースされたMicrosoftのWindows 95は、Windowsとしては初めてコマンドプロンプトに依存せずグラフィカルユーザーインターフェース(GUI)ベースで操作できるOSで、一般家庭へのPC普及に一役買ったといわれています。そんなWindows 95について、海外のQ＆AサイトであるStackExchangeで「Windows 95ではマウスカーソルを動かすと処理速度が上がったのはなぜですか？」という質問が投稿されました。



Why did moving the mouse cursor cause Windows 95 to run more quickly? - Retrocomputing Stack Exchange

https://retrocomputing.stackexchange.com/posts/11533/revisions



質問者が90年代のインターネットを体験できるシミュレーションゲーム「Hypnospace Outlaw」をプレイしていたところ、「ゲーム内でウェブページを読み込むときにマウスカーソルを動かすと、ページのローディングが早くなる」という動作に気づいたとのこと。そして、かつて使っていたWindows 95でも、プログラムのインストール中にマウスカーソルを動かすとインストールの進みが早くなったことを思い出したそうです。質問者はこれは事実なのかを調べるためにGoogleで検索してみたそうですが、有力な情報が得られなかったとのことで、StackExchangeに質問を投稿したというわけ。



by Douglas Muth



この質問に対して、「おそらくそれは単に気のせいでマウスを動かすと画面がリフレッシュされるので、動かさない時よりも進みが早いように見えるだけです」「砂時計のアイコンを動かすと砂が早く落ちるから処理が早くなるというジョークがあったのを覚えています」など、あくまでも質問者の気のせいという回答が寄せられていました。





しかしそんな中、「これはWindows 95のイベント生成方法に問題があり、多くのアプリケーションがイベント駆動型で設計されている事実によるもの」と、マウスカーソルによる処理速度アップを認める回答が投稿されました。



この回答によると、Windows 95が登場した当時のアプリケーションが非同期I/Oを採用していたことに、マウスカーソル移動による処理速度アップの原因があるそうです。同期I/Oのプログラムでは、データを入力してから出力するまでプログラムを停止して処理を待ちます。しかし、非同期I/Oでは、入力されるとプログラムが処理中の状態になり、処理を行っている途中でもプログラムを停止せずに別の処理を実行することができます。そして、処理が完了したらOSが通知するという仕組み。



プリエンプティブマルチタスクはWindows 95で初めて可能になりました。しかし、それ以前のWindows 3.1ではアプリケーション側から擬似的にマルチタスクを可能にさせるノンプリエンティブマルチタスクが採用されていました。そのため、Windows 95初期のアプリケーションは非同期I/Oを採用したものが多いというわけです。



by Abel Cheung



性能がそれほど高くないPCだと、パフォーマンス上の問題から複数の出入力完了がその都度処理されるのではなく、すべての出入力が終了してからまとめて処理されるとのこと。ただし、ユーザーの入力を受け付けると、その時点で保留中の入出力通知を処理し、処理中の状態になっているアプリケーションが進むそうです。そのため、マウスを動かすことでインストールが早くなるそうで、1時間ほどかかりそうなインストールもマウスを動かすことで15分に短縮できると回答者は述べています。



なぜこのような仕様になっているのかはわからないと回答者は述べていますが、Windows 95の開発に携わったレイモンド・チェン氏はMicrosoft公式ブログの中で同様の動作をバグとして言及していました。



MsgWaitForMultipleObjects and the queue state | The Old New Thing

https://devblogs.microsoft.com/oldnewthing/?p=36423



なお、Wordでの印刷時にマウスホイールを動かすことでスプール処理が爆速で進むというテクニックも以前から指摘されていました。この原因について、以下のYOHGAKIさんのブログでStackExchangeでの回答と同様の推察が行われていました。



マウスをぐるぐる回して高速化!? – yohgaki's blog

https://blog.ohgaki.net/a_a_ba_sa_a_a_a_a_a_a_a_bel_e_a