ソフトウェア

Google ChromeでYouTubeを開くと自作プログラムの処理速度が約5%向上したという報告、いったいなぜ?


「YouTubeを見ているとなぜか自作プログラムの処理速度が上がった」という一見すると不可解な現象が、プログラミング言語FreeBASICのフォーラムで報告され、その意外な原因が特定されています。

YouTube increases FreeBASIC performance (solved) - freebasic.net
https://freebasic.net/forum/viewtopic.php?t=27927

FreeBASICのフォーラムユーザーであるProvoni氏が、「Google ChromeでYouTubeを開いている間、自作のFreeBASICプログラムのマルチスレッド処理のパフォーマンスが約5%向上する」という事象と報告しました。Provoni氏によれば、Microsoft Edgeでは同様の効果が見られず、ChromeでYouTubeを再生している時にのみ発生するとのこと。


当初、フォーラム内では、動画再生によってCPUへの負荷が増えたことでWindowsの省電力機能が解除され、クロック周波数が上がったことが原因ではないかとの推測がなされました。しかし、実際は「Windowsのシステムタイマーの分解能が原因」と結論づけられています。


ここで重要になるのが、プログラムの実行を一時的に止めるSleep関数です。Sleep関数とは、指定したミリ秒数だけ処理を中断し、待機状態にする命令で、たとえば「Sleep(1)」と記述すれば、プログラムは1ミリ秒待機します。これはゲームの描画タイミングを調整したり、CPUを無駄に占有しないよう休ませたりするために使われる基本的な関数です。

WindowsなどのOSは、複数のプログラムを同時に動かすために時間を細かく区切って管理しています。通常、この時間の最小単位、すなわちシステムタイマーの分解能は、初期設定で約15.6ミリ秒という比較的粗い間隔になっています。

もしプログラム側で「1ミリ秒だけ待って(Sleep(1))」と命令しても、OSのシステムタイマーの分解能が約15.6ミリ秒であるため、実際は次のタイミングが来るまで実際には15ミリ秒以上待たされてしまいます。これは、プログラム全体で大きな時間のロスが生まれていることになります。


一方、ChromeやFirefoxといった一部のブラウザは、動画や音楽を滑らかに再生するために、このOSのシステムタイマーの分解能を強制的に「1ミリ秒」という高精度な状態に変更する挙動をとります。

Provoni氏がYouTubeを開いたことで、ブラウザは裏側でOSのシステムタイマーの分解能を引き上げていました。その結果、Provoni氏のプログラムに含まれていた待機処理も高精度かつ短時間で実行されるようになり、結果としてプログラム全体の処理速度が向上していたというわけです。

この記事のタイトルとURLをコピーする

・関連記事
「ライターを点火するとPCモニターが消灯する」という謎現象 - GIGAZINE

「ヌル氏」名前のせいでビザが発行されずホテルの予約もできずインターネット契約すら解約できず他人宛の郵便物が届きまくる - GIGAZINE

予期せぬバグの原因は「満月」だった - GIGAZINE

「不調なWi-Fiが雨の降っている時だけなぜかつながる」謎をエンジニアが解明 - GIGAZINE

「MacBook Airを使うと口の中に奇妙な味がする」という謎現象が報告される - GIGAZINE

「IKEAの椅子に座るとPCの画面が真っ暗になる」という怪現象の理由が判明 - GIGAZINE

バニラのアイスを買ったときだけ車のエンジンがかからなくなる不思議な現象、その原因は? - GIGAZINE

ジャネット・ジャクソンのヒット曲を再生すると古いHDDがクラッシュする脆弱性が話題に - GIGAZINE

「朝7時にインターネットが突然つながらなくなる」という怪奇現象が1年半も続いた村、その原因とは? - GIGAZINE

in ソフトウェア, Posted by log1i_yk

You can read the machine translated English article Why is it reported that opening YouTube ….