ビジーウェイトなしに正確な時間待つ関数を作るには?
昨日の続きです。負荷に応じて切り替える手法は、良さそうに見えて実は高負荷かどうか?という判定が意外に難しいことに気づきます。もっと単純かつ効果的なのはポーリングしているスレッドの優先度を1〜2段階上げることです。
既に知っている人は昨日の日記を読みながら、何だそれしきの事とニヤニヤしていたかな。うそ?それだけ?って思った人は実際にやってみて体感してください。キーワードはSetThreadPriority() です。
バックグラウンドで動かすなら、ポーリングの間隔は10ms以上が良いと思います。1msだと頻繁に起こるスイッチングの負担で他のアプリケーションが遅くなります。あくまでもこれは我が家のマシンでの体感です。他の環境だともっと間隔をあけなければならないかもしれません。
代替わりコンパに行きました。知らない顔がかなり増えていてびっくりですよ。せめて作業くらいは顔を出そうかな、と思いました。
たまには読まれもしない長文を書いてみようかなーっとぉ!(直ってない)
JoyToKeyもどきでは、デバイスを1ms間隔でポーリングしています。そのためには1ms経つまで帰ってこない関数が必要になります。現在の実装ではSleepとtimeBeginPeriodを使って(※)います。なぜなら、負荷が低い状態ならばSleep(1); はほぼ1[ms] で帰ってくるし、これによりCPUをアイドル状態にでき、電気代の節約にもなるためです。一石二鳥なのです。
しかしこのソフトを使うときはゲームしていることが多いため、ゲーム側で高い負荷がかかる事があります。高負荷時にはSleep(n); はn[ms] では帰りません。高負荷時にはSleep(1); が10msとか20ms後に帰ってくることもザラです。
Sleepとは現在このスレッドは暇だから、指定した時間が「過ぎるまで」他のスレッドにCPU時間を譲りますよ、とOSに教える事です。そのため自分以外に高い負荷がかかるスレッド(つまりゲーム)がいれば、Sleepを呼んだスレッドに制御を戻すのを遅らせてでも、高負荷のスレッドにCPU時間を割り当てるのは当然の動きです。低負荷ならばSleep(n); がn[ms] で帰ってくる傾向がある、というだけで常にSleep(n); がn[ms] で帰ってくることは誰も保証していないのです。
Sleepを嫌うとビジーウェイト(時間がたつまでループして待つ)ことになりますが、JoyToKeyもどきがCPU 100%食うようなアプリケーションだと嫌ですよね?…どうでもいい?チッ、皆が良くても俺は嫌なんです。
これは今作っているアプリケーションに限った問題ではなく、数msごと処理を実行するという部分があれば必ず出る問題です。ビジーウェイトなしに正確な時間待つ関数を作れれば、有用だと考えます。
現在考えているのは、低負荷時にはSleepを使い、高負荷時にはビジーウェイトに切り替える関数です。予想される弱点としては、低負荷時にSleepを使って待つため一時的に高負荷になるとSleepがデッドラインを超えてしまう可能性があることです。ゲームに用いると一時的な負荷で激しく処理落ちする欠陥と言われそうですが、JoyToKeyもどきには妥当な落としどころでしょう。実装できたらまた書きます。誰もここまで読んでないだろうけど、次回をお楽しみに。
※WindowsはtimeBeginPeriod(1); を呼ぶとなぜかSleepの分解能も変わります。この副作用は昔からあるようです。とりあえず呼んどけ。
セミナー発表が終わりました。その後の全体ゼミで、先生から昨日と比べるとだいぶよくなったと言われ嬉しかったです。
もうひとつ、発表のときに「ここはこうなります…っと」のような変な語尾(たぶん次のページに移る時に言う)はやめた方が良いと指摘されました。「はい、気をつけます」と返事したものの、無意識なので直らないかもしれないです。
再び先生に見てもらうと、それじゃ全然わからないといわれました。
ここ一週間で色々意見をいただいたのですが、総合してもよくわからないのであきらめました。発表は明日でもう時間ないし、自分にとって筋が通るように直します。
授業行きました。明日の発表練習に向けてスライドを直し、寝ました。
文章を阿部さんに見ていただくと共に、スライド発表を先生に見てもらうと、構成が良くないらしくわからんといわれました。水曜もう一度見ていただけるようなのでスライド直しの夜です。
引きこもりはなぜコンピュータ関連の仕事?と山下さんのページにあったので、考えてみた。
まずプログラマですが、どこかの会社に雇われているはずなので不可能だと思います。打ち合わせにも行かずに何を作るつもりでしょう?これはプログラマだけでなく定職に就くならどれにも言えます。
他には、ブログにアマゾンとかのアフィリエイト収入で生きるとすれば不可能ではないと思います。しかし収入を気にすると購買意欲を掻き立てる文章を書くため、裏づけとなる知識の収集などが必要ですよね、やはり出かける必要があると思います。
あとは出歩きたくてもできないくらいの障害を持つ人がやる仕事をゲットできれば引きこもれるけど、採用担当には仕事をなめてる奴としか思われないでしょう。これも非常に困難だと思います。
こんなところかな…。平凡な答えでしかも長くてすみません。
じょーと昼を食べて、谷田部の野球場に送りました。野球サークルのOB会だそうです。そして2:30頃にくいだおれに迎えに行きました。もちろん深夜よ?
迎えに来いと言われる方が、変に遠慮されて飲酒運転で事故られるよりよっぽどまし。命は大事にせねばいかんよね。あと30年は友達の葬式なんか行きたくないからな!
セミナー関連。文章に引き続きスライドも阿部さんにチェックしていただきまして、家で指摘された点の直しなどをしていました。月曜日は加藤先生も見てくださるそうです。
Nationalの美容関連CMで必ず言う「きれいなお姉さんは好きですか」というフレーズ、有名ですね。一体、きれいなお姉さんは何人いるのか?気になったので調べてみました。
初代から、水野真紀('92〜'96)、松嶋菜々子('97〜'00)、片瀬那奈('01〜'02)、中谷美紀('03〜'04)、そして現在は仲間由紀恵('05〜)です。
年齢的にシリーズ全部見ているはずなのに、松嶋菜々子と仲間由紀恵(てか今じゃん)しか覚えていません。片瀬那奈は最近見た番組でその話題が出てきて知りました。たった5人なのに意外と覚えていないものだな。
このページにアクセスしてきた人のUserAgentとRemoteHostのカウント数を見るだけの機能は昔からあったけれど、何か物足りないので、新たにブラウザごとのカウント数を出す機能を追加してみました。定義ファイルからデータを得ます。定義ファイル方式は自動判断より手間がかかるのですが、単にPerlでプログラム書くのが嫌だと思っただけです…。
結果はIE6が圧倒的です。Firefoxががんばっていますが、ページの作者たる自分が使っているから多いのは当たり前。ここに訪れる人のシェアとしてはもっと少なくなるでしょう。
研究室に行って塚田氏のプログラムの手伝い、というかロジックの部分を共に考えていました。誰かが書いた数式を理解するのは面倒だが、込み入った事を自分で数式で表すときは便利だなあと感じます。ちなみにセミナーの文章書きは進みませんでした。
研究室のマシンをLinux 2.6カーネルにしてから、ネットワークが良くストールするようになってしまったので2.4に戻しました。わずか3日の短いお付き合いでした。
USBメモリを買いました。本当は買わなくてもいいのですが、セミナーがあるから一回は使うよ、これから絶対元取るよ、と自分へ言い訳して買いました。256MBで3000円もするんだね、高いなあ。
帰りにカワチに寄ったら、自分の目の前に居た女性が 2万2千円も買い物していきました。コットンとコンタクトの洗浄液が1カゴに山盛り&数千円の細長い箱が4本くらい。勢いの良い買い置きだった。
家に帰ってUSBメモリを使ってみましたが、あまりの遅さに使う気がなくなりました。君には失望させられたよ。
研究室に行きました。阿部さんにセミナーの文章の直しなどをしていただきました。
白雪姫とシンデレラってどんな話だっけ?リンゴと七人の何かと継母とカボチャが舞踏会で王子様が姫様どこやねんって探しにくる。いや、これは滅茶苦茶ですけど、どちらもディズニー映画のキラキラした幸せそうなイメージしかないですね。
原作は白雪姫もシンデレラもグリム童話なので、人が死にまくりです。Wikipediaを見ると、白雪姫の最後は継母を殺す披露宴だそうですよ。なんで結婚式にそんなことするかな。こっそり殺っとけよ。
セミナーの文章あらかたでっちあげで書いてみて、先生と阿部さんに送ってみました。明日はその訂正作業に追われる事と思います。
< | 2005 | > | ||||
<< | < | 11 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | - | - | - |
合計:
本日: