監視頻度とCPU負荷の関係

[統計] HTMLからXHTMLへの移行を進めていますか?



0   名前: りごろ : 2006/05/11(木) 00:40  ID:L9Rz2QYt
お疲れさまです。
JavaScript初心者です、よろしくお願いします。
setTimeoutで関数の命令を監視するスクリプトを書いたのですが、
気になっていることがあります。たとえば、
window.setTimeout('DoIt()',10)

とした場合には、私の感覚ではとてもPCを酷使しているように
見えます。逆に
window.setTimeout('DoIt()',10000000)

とやった場合には、PCの負荷をかなり少なくしてやっている
ように思っていました。
でも、よく考えてみると、どちらも同じことのように思いはじめ
ました。私の考えは正しいですか。ご教示よろしくお願いします。

1   名前: Pid ◆byEkK9OALr : 2006/05/11(木) 00:40
単純に考えて,1/100 秒間隔で監視するよりも,10000 秒(約 167 分)間隔で監視する方が負荷が小さいのは当然かと思いますが。そういうことではないのかしらん…?

『どちらも同じことのように思い始め』という部分を,もう少し説明して頂けますか。


※なお,NN4 を相手にするのでなければ,setTimeout (Dolt, 10) のように,文字列ではなく関数のポインタを渡した方が良いでしょう。

2   名前: りごろ : 2006/05/11(木) 00:40  ID:ECc.dcgL
Pidさん、ご回答ありがとうございます。

私が思ったのは−素人考えですので外れているかもしれませんが−
10ミリ秒で監視するということは、とりもなおさず10ミリ秒ごとに
動作していることだと思います。PCが演算している中枢部では、
たぶん大した忙しさではないのでしょうけれど。

さて、1000ミリ秒で監視させるようにsetTimeoutを設定したとする
と、PCは1000ミリ秒に1回動けばいいように思えます。実際、わ
たしはそう考えていました。

でも、よく考えてみると−素人考えですので外れているかもしれま
せんが−PCは10ミリ秒だろうと、1000ミリ秒だろうと、もっと微小
な間隔のクロック周波数で命令された動作を見守っているので、ど
ちらにしても、負荷は変わりないのだと思ったわけなのです。

よいたとえが思い浮かばないのですが、時計を例にとると、長い針
を動かすのも、短い針を動かすのも、毎秒ごとに刻む歯車によるの
であって、短い針は長い針の60分の1の余裕で動いているわけでは
ないということに近いでしょうか。
つたない説明でお分かりいただければうれしいのですが。

3   名前: ラマ : 2006/05/11(木) 00:40  ID:ya6xOqUo
横から失礼します。
OSがWinなら、
アプリケーションは必ずメッセージループ(上記で言う毎秒刻む歯車のようなもの)を持っています。
これは、setTimeoutを使おうが使うまいが常に動き続けていて、OSから送られる[メッセージ]というものを監視しています。
恐らく、setTimeoutを指定すると、IEやNNはOS側に「一定時間経過したらWM_TIMERと呼ばれるメッセージを投げて下さい。」という命令を出すはずです。その後は普段どおりメッセージを監視し続け、OSから送られるメッセージに従って処理を続けます。ここでWM_TIMERというメッセージが来たら、それ用の処理を実行(上記のDoIt)を実行するわけです。

従って、Doit()の処理が無視できるほど軽いものであるなら、おっしゃるとおり10ミリ秒だろうと、1000ミリ秒だろうと関係ありません。

関係ないけどもうひとつ。winでは、WM_TIMERで100ミリ秒以下の動作は保障されていなかったと思います。従って、10ミリ秒指定がホントに10ミリか?というとIEやNNの実装でそこまで対応しているか?という問題になります。(作り方によっては対応できるのですが、対応しているかの検証が外からでは難しいです。)

一覧へ戻る