• 締切済み

ビジーウェイト

ビジーウェイトによる相互制御はある変数になるまで連続的にテストする方法ですが欠点としてアイドル状態になることがないことと非生産的な点が挙げられると思います。長時間の待ちの可能性がある場合には適していません。 ここで疑問なのですが、どこが非生産的なのでしょうか? デットロックが発生するわけでもなく働き続けているわけだから 例えば生産者消費者問題でも生産者はバッファが満杯になるまでとにかく生産しまくる。消費者は0になるまでとにかく処理しまくる。これでいいんじゃないかと セマフォによってお互いの状態を同期しあいながらやるのと生産性は違うのでしょうか? ご教示お願い致します。

みんなの回答

  • k-841
  • ベストアンサー率27% (129/465)
回答No.2

マルチプロセス環境では、非生産的な仕事に計算資源を割かれてしまうため、他のプロセスがそれだけやりたい仕事を待たされてしまうという問題があります。 また、いわゆるアイドル状態とビジーウェイトの大きな違いは、CPU等の内部の状態(トランジスタのON/OFFなど)がほとんど変動しないか大きく変動するかです。前者の場合はNOPと呼ばれる内部状態をほとんど変化させないダミー命令を発行し続けたり、最近のCPUでは回路を部分的に電源団の状態にしたりしますが、後者の場合は我々人間から見ると非常に簡単な計算かもしれないけど実際にコンピュータに仕事をさせ続けていることには変わりなく電流がより多く流れるためコンピュータ(特にCPU)が熱くなりますし、電力もたくさん消費します。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

人間の仕事で考えてみれば判ると思います。 上司が部下に「○○の仕事をお願いしてください」とお願いしたときに、その仕事が終わるのを部下が報告しない場合、何度も部下の仕事の状況をチェックすることになります。 もし、部下が「仕事終わりました!」と報告することが決まっていれば、上司は、その報告があるまで、他の部下に割り振る仕事の準備や結果のチェックをこなすことができます。 上司をCPUと考えれば、連続的に何度も部下のチェックをしていたら仕事効率が悪化するのがお分かりになると思います。 ちなみに、上司の持つ部下が1名だけで、上司が自分のすべき仕事を持っていないなら、ビジーウエイトとセマフォーの生産性の差は、あまり大きくならないと思います。 そして、PC等でも同様な傾向があると思えます。

関連するQ&A

  • 巡回バッファを使用した生産者-消費者問題について

    ダイテル社のJavaプログラミングvol.2という本のサンプルコードなのですが、このプログラムは、5つの要素を持つ配列を共有バッファとし、それを生産者スレッドと消費者スレッドの共有資源とするものです。 ProduceIntegerクラスが生産者、ConsumeIntegerが消費者に対応しています。共有バッファは、HoldIntegerクラスのインスタンス変数holdvalue[]です。生産者は共有バッファに0~9の整数を書き込み、消費者は書き込まれた整数を読み込むことによって生産者-消費者を再現しています。実行結果について、正しく生産者が生産した0~9を漏れることなく消費しているのですが、ここで質問です。 生産者スレッドは、0~9の値を書き込むと、HoldIntegerクラスのmoreDataをfalseに設定して死亡します。 消費者スレッドは書き込まれた値を全て消費するまで58行目のwhile文で繰り返されます。生産者スレッドのほうが、消費者よりもsleep時間が短いので、大抵生産者スレッドは先に値を書き込み終わります。生産者スレッドが値を書き込み終わりmoreDataフラグをfalseにしたあたりのところ(実行結果26行目)で疑問があるのですが、まず生産者スレッドのwhile条件は(moreDataがfalse かつ writeLocとreadLocが同じ)でない時です。もし、生産者スレッドがmoreDataフラグをfalseにした次の瞬間に消費者スレッドのwhile条件が評価された場合は、実行結果を見て分かるようにreadLoc=0, writeLoc=0なのでそこでwhileを抜けて消費しおわってない状態でスレッドが死亡してしまうと思ったのですがどうでしょう?sleepTimeを乱数でとっているためタイミングによって左右されるのではないでしょうか。納得ができないので、どうか説明よろしくお願いします。説明分かりにくかったらすみません。 ソース:http://izumo.cool.ne.jp/precious7/SharedCell.java 実行結果:http://izumo.cool.ne.jp/precious7/result.txt

    • ベストアンサー
    • Java
  • ANDROID OSがモバイル向きな理由

    最近よく聞くANDOROIDですが、特徴として消費電力が少ないことが挙げられるようです。 LINUXが土台にあることは知っていますが、電力についてはどうして低消費電力になるのでしょうか。 通常のOSは高負荷時とアイドル状態、そしてサスペンド等ほぼ停止している状態があるかと思います。 それと比べると、使用していない状態の電力消費がアイドルよりもサスペンドに近いのでしょうか、それともアイドル時の電力消費自体が少ないのでしょうか。 バックグラウンドジョブの処理が少なければ消費は少ない気がしますが、それだけでは無い気がします。 最近のCPUが状態に合わせて電圧などの変更のも知っていますが、それの管理が違うのでしょうか。 それとも、ハードウェアに近いレイヤーでの制御を作り込んだりしているのでしょうか。 電力的なところでの特徴を教えていただくと共に、他のOSも同様に消費電力を抑える方法があれば教えてください。

  • 日産の「ニュートラルアイドル制御」

    日産の「ニュートラルアイドル制御」(停車時にドライブ(D)ポジションに入っていてもCVT内部はニュートラル(N)ポジション状態に制御し、燃料消費を低減)について (1)ドライブ(D)からニュートラル(N)へ移行する時間は、停車後、何秒ぐらいでしょうか? 一寸停まる度に、頻繁に働くのでしょうか? (ひょっとして移行時間を自由に設定できる機能があるとか....) (2)停車からの発進の際(自動でドライブ(D)に復帰する際)、やはりショックはあるのでしょうか? 一般的なAT車では、ニュートラル(N)からドライブ(D)に入れた際、『コツン』と一寸ショックがありますよね。 ニュートラルアイドル制御では、どんな感じなのでしょうか?

  • on-off制御の欠点についての数学的な証明

    http://www.compoclub.com/products/knowledge/jidou_seigyo/jidou_seigyo2.html を読み、オーバーシューティングが起こる状況においてはon-off制御ではサイクリングが起こりうることを理解しました。また、オーバーシューティングはセンサーの感知の遅れから来るものだと理解しています。 それに対して制御量を0-1のニ値だけでなく、状態変数に対し連続に[0,1]の中間の値を取る場合には、このようなサイクリングを回避できるのではないかと私は考えています。(比例制御やPID制御とかはまだ解説を読んでいません。)特に、センサーが(例えば)常に1分遅れて感知するようなときに、on-offではこの1分のon/offに相当する分の「動作すきま」で状態変数がずっとサイクルし続けるのに対し、連続的に制御する場合には漸近的にターゲットの状態に収束できるのだと思っています。 おそらく比例制御等はそうした連続的な制御の一種で、制御理論を専攻する方には当然だと思いますし、その分野ではシミュレーションで十分説得的なのだと思います。ただ私は工学一般に門外漢で、かつ数学的な証明を必要としています。そこで、もしも連続的な制御に比べたon-off制御の欠点(上記のオーバーシューティング・サイクリングに限らなくてもよいです)を、何らかの数理的なモデルの中で数学的に証明している教科書があったらお教えください。(連続的な制御による収束も証明が欲しいです。できたら非線形なモデルが好ましいです。またそのようなclaimを証明した論文でも構いません。あと、連続的な制御としては、比例制御やPID制御自体を考えたいのではありません。細かく言うと、センサーに遅れがないときには、リヤプノフ関数を誘導する連続的な制御を考えており、その優位性を証明したいと考えています。) dynamic system自体は少々勉強しているので(また必要とあれば更に勉強することはいとわないので)、前に最適制御について Haddard and Chellaboina "Nonlinear Dynamical Systems and Control: A Lyapunov-Based Approach" http://www.amazon.com/dp/0691133298/ は読みやすかったと思い、このようなスタイルで定理・証明があるものを望んでます。(もしかしたらこの本の中にあるかもしれませんが、手元になく、またAmazonで索引を見ても、bang-bang/on-off controlは見当たりませんでした。)

  • DCF(Distribution Coordination Function)について

    現在、無線LANシステム技術について勉強しています。 このなかの制御方式にDCFというものが出てきますが、このことで質問があります。 無線チャネルがIDLE状態である場合無線端末から無線基地局へデータを送信するわけですが、その前にDIFS時間とバックオフ時間を置いてからということになりますよね?ここでなぜわざわざDIFSとバックオフ時間の両方を待たなければならないのでしょうか?

  • ビジーです が続いて

    インターネット予約などでhttps:で始まるネットにアクセスするとProxy Serverがビジーなのでこの要求を処理できません。にすぐなってしまいアクセスできません。全てそうです。何が原因ですかねえ?

  • 明日までです!急いでます!撹拌槽型混合プロセスの制御系を設計

    明日までです!急いでます!撹拌槽型混合プロセスの制御系を設計 撹拌槽型混合プロセスの制御系を設計する.この混合プロセスでは,成分X の濃度が 異なる2種類の原料を混合し,指定された成分X濃度の製品を,指定された量だけ生産しなければならない. 原料1 および2 の成分X 濃度はC1、C2[kg/m3],流量はF1,F2[m3/s]であり,混合器からの流出液(製品) の成分X 濃度はC3,流量はF3 である.この混合器の断面積は一定でA[m3] ,液レベルはL[m]であり,内部は完全混合状態を仮定する.液密度は濃度や温度によらず常に一定でρ[kg/m3] とする.このとき,以下の問いに答えよ. 1. 全成分の物質収支式を導出せよ. 2. 成分X の物質収支式を導出せよ. 3. このプロセスの状態方程式を求めよ 4. このプロセスの状態変数を求めよ. 5.プロセス自由度を答えよ 6.原料1および2の濃度は原料タンクの状態によって決まるとする。このとき制御自由度を求めよ.

  • ビジーがうっとしい

    コンピューターがすぐにビジー状態になったり、例外OE(?)が発生して困っています。これって防ぐ方法あるんですか?

  • 「ビジーです」と出ました。

    質問失礼します。 先ほど、とあるアルバムサイトで写真を見ていたのですが、別窓を開いたところ、ウィンドウが真っ白になり写真が表示されませんでした。 ウィンドウを閉じようとしたところ 「このウィンドウはビジーです。ウィンドウを閉じると問題が発生する可能性があります。ウィンドウを消しますか?」と出ました。 「はい」を選択しても消せません。 パソコンの限界までメモリ等を使ったため、と調べたら出たのですが、特に新しくソフトを入れてはいません。ウィンドウは3つ開いていましたが、今までもそれくらいは開いていましたがこんな表示が出るのは初めてで驚いています。 どうやったら安全にウィンドウを消せますか? 強制終了で再起動でもいいのでしょうか。 現在の常駐プログラムはSpyBotとノートンくらいしか思い当たりません。 OSはXP。ノートパソコンでメモリ増設済み。 ご回答よろしくお願いします。

  • プログラム使用中だけCPU使用率が100%

    Windows10でWinrarを使用して解凍しているときだけ、タスクマネージャーのCPU使用率が100%になります。詳細タブを見てもSystem Idle Processが90以上であり、リソースモニターでもCPU消費率が大きいものはありません。普段は合計が数%程度で、個々のプロセスも0~2%ほどなのに、解凍中だけそれぞれのプロセスで値が数倍になっているという状態です。 Winrar使用時はいつもこの状態、というわけではなく、主に丸1日以上つけっぱなしにしたパソコンを再起動するとこうなります。その間は動作がいつもより少し重くなるものの、不自由するほどではなく、この状態からシャットダウンし、1日~2日おいておくと直るので、特に困ることはありませんが、なぜこうなるかが気になります。原因はさまざまあるでしょうが、何かわかることがあれば教えていただきたいです。