前のエントリで
本当かどうか知らないのですが「マウスでぐるぐるポインタを回しているとPCが速く動作する」と言うバカバカしいと思われる知識
と書いたのですが、divineさんから「Word の「印刷」を劇的に速くする方法を発見。ホイールを上下するだけ!」と言うブログへのリンクを教えていただきました。(divineさん、ありがとうございます)「マウスをぐるぐるして高速化」はバカバカしいように思えるのですがマウスホイールを回すと実際に速くなる場合もあるようです。以下が速くスプールできる理由の推測です。
ご存知の様にWindows95より前(Windowsは3.1まで)はコーポレイティブ(非プリエンプティブ)なマルチタスク(アプリが自分で処理をOSに返す)でした。MS Officeの開発は少なくともWindows 3.xの頃(Windows 3.1上でOffice 4.xを実際に使っていました。実際の開発ルーツはもっと前でしょう)までさかのぼれますが、Wordの印刷処理をバックグラウンドで行うには現在のようにスレッドを作ってOSに任せる事が出来ませんでした。昔のアプリケーションではバックグラウンド処理を行うには擬似的にスレッドを実行するような感じのコードを書く必要がありました。この擬似スレッドの様に動作するコードのためにイベントが発生するたびに、より速いタイミングでバックグランド処理が行われる仕様となってしまったアプリケーションができたのだと思います。Wordのスプールの場合、再描画のスレッドとスプール処理が関連している(リンク先(Word の「印刷」を劇的に速くする方法)を参照)ためマウスのホイールを動かしてスクロールさせると速くスプール出来てしまう動作(仕様)になってしまったようです。
# 今のOfficeならこんなコードを捨てて普通にスプール用の
# スレッド作るだけで劇的にスプールが速くなると思います。
# 推測ですが。
とにかく「マウスでぐるぐる回しているとPCが速く動作する」というノウハウは100%嘘ではなく、一部では本当に処理が高速化できる!という事は書いておなければと思いここに書いています。(注:とは言っても単純に「マウスポインタだけ」をぐるぐるしているだけでは処理は速くなりません)
さて、マウスやキーボードを使っていると処理が速くなるケースはUNIXでもありえます。/dev/randomはマウスやキーボードなどからの入力を乱数生成に利用しているので一部のアプリケーション(特に強度が強い暗号処理)で乱数のシード待ち状態が発生する事があります。このような場合にはマウスポインタをぐるぐる回すと結果として処理が早く完了します。
Windowsだけでなく昔のMac OSもWindowsと同様にコーポレイティブマルチタスクでした。探してみればWindows、Mac OSがコーポレイティブマルチタスクだった頃の名残りで「マウスを動かしている(イベントを発生させている)と処理が速くなる」ケースは結構沢山あるのかも知れませんね。
マウスぐるぐるでアプリケーションの動作が高速化する場合が他にもあるでしょうか? もしご存知の方、是非教えてください。
Leave a Comment