- 締切済み
ソフト構造の呼び方
メインループで待機中、イベントが発生したらそれに対応する処理をその1回の ループで全て終わらせてしまうようなソフト構造を何と呼びますか? またそれとは逆に、イベントが発生したらそれに対応する処理を複数回のループ で終了させるような構造を何とよんだらいいでしょうか? (これが時分割ということですか?) それぞれの長所、短所もおしえてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- noocyte
- ベストアンサー率58% (171/291)
#1 です. > (a)1回のループで全ての処理を終わらせる 方法 > と > (b)1回でなく、複数回に分けて全ての処理を終わらせる 方法 > の呼び名のことです。 複数のアプリケーションを短時間で切り替え,同じ優先度の処理を 順繰りに実行する場合,そのスケジューリングを OS が行っている のならば,#2 さんが書かれているようにラウンドロビンと言いますが, アプリケーションが自分で行う場合の名前は聞いたことがありません. (そういうプログラムを昔書いたことはありますが.) (a) 対 (b) の図式に近いものはバッチ処理と時分割処理 (Time Sharing) でしょうか.ただしこれも OS がスケジューリングを制御していることには 変わりありませんが. バッチ処理 (Wikipedia) http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%81%E5%87%A6%E7%90%86 タイムシェアリングシステム (Wikipedia) http://ja.wikipedia.org/wiki/%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B7%E3%82%A7%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0 > 例えば、重たい処理を1回のループで全て順番にやっていこうとすると、 > 処理A→処理B→処理C→・・ > と処理Cを行うときには、処理Aを行ってからかなりの時間が経過して > いる可能性がありますよね? > > なので、それぞれの処理を細かく分けて、 > 1回目のループ: 処理A-1→処理B-1→処理C-1→・・ > 2回目のループ: 処理A-2→処理B-2→処理C-2→・・ > 3回目のループ: 処理A-3→処理B-3→処理C-3→・・ > というように行わせたいのです。 リアルタイム性能を重視する場合,そういう処理の分け方をするのではなく, 「イベント発生から所定の時間内に終わらなければならない処理」と そうでない処理を分け,前者を優先度の高いタスクとして実行するのが 普通だと思います. また,リアルタイム OS では優先度を動的に変更する機能も持っています. たとえば本来優先度の低い処理Aが終わらないと優先度の高い処理Bを開始 できない場合,Aの優先度をBの優先度まで上げて早く終わらせます (優先度継承). リアルタイムシステム (Wikipedia) http://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2%E3%83%AB%E5%87%A6%E7%90%86 優先度継承 (Wikipedia) http://ja.wikipedia.org/wiki/%E5%84%AA%E5%85%88%E5%BA%A6%E7%B6%99%E6%89%BF
- rinkun
- ベストアンサー率44% (706/1571)
複数のタスクを短い時間で切り替えて並行に実行する。アプリケーション自身でそういう制御を行う構造には名称はなかったと思いますが、OSで行うものではラウンドロビン・スケジューリングと言いますね。 このレベルだと、イベントがあったら対応する処理を一気に実行するのはFIFOスケジューリングでしょうか。 イベントによる割り込み・再スケジューリングがないとすると、どちらも処理中には次のイベントが処理できないという問題がありますね。 FIFOの長所は単純さです。余分な処理もないのでスループットは高いです。レスポンスは最悪ですけど。 ラウンドロビンはFIFOよりレスポンスは改善します。ただしプログラムの複雑化とオーバーヘッドが必要です。 特に各タスクをタイマ割込みで強制中断切替するのではなく、各タスクを分割して自発的に切替える(疑似マルチタスク)のなら、各タスクを適切な処理規模に分割して切り替え処理を呼び出す手間が掛かります。
- noocyte
- ベストアンサー率58% (171/291)
> メインループで待機中、イベントが発生したらそれに対応する処理をその1回の > ループで全て終わらせてしまうようなソフト構造を何と呼びますか? イベント駆動型 (event-driven) プログラム. で,そのループはイベントループ. なお Windows の GUI アプリケーションでは,ほとんどのイベントは ウィンドウ・メッセージなので,メッセージ・ループと呼んでいます. "イベント駆動" で検索 http://www.google.co.jp/search?q=%22%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E9%A7%86%E5%8B%95%22&sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-34,GGGL:ja イベント駆動とは 【イベントドリブン】 - 意味・解説 : IT用語辞典 http://e-words.jp/w/E382A4E38399E383B3E38388E9A786E58B95.html @IT:Insider's Computer Dictionary [イベント駆動] http://www.atmarkit.co.jp/icd/root/82/5783582.html イベント駆動型プログラミング (Wikipedia) http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E9%A7%86%E5%8B%95%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 メインループ (Wikipedia) http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%97 > またそれとは逆に、イベントが発生したらそれに対応する処理を複数回のループ > で終了させるような構造を何とよんだらいいでしょうか? あらかじめループ回数を決めて,というのは聞いたことがないけど, 1回で全部処理するには時間がかかりすぎるから分割したいとか, 必要な条件が整わないから処理を次回に持ち越したい,ということですか? > それぞれの長所、短所もおしえてください。 その2つを比較する趣旨がよくわからないんですが, 学校の課題か何かですか? OS の授業ですかね? だとすれば,プリエンプティブ (前者) 対ノンプリエンプティブ (後者) ということかなぁ? "ノンプリエンプティブ" で検索 http://www.google.co.jp/search?q=%22%E3%83%8E%E3%83%B3%E3%83%97%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%97%E3%83%86%E3%82%A3%E3%83%96%22&sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-34,GGGL:ja ノンプリエンプティブマルチタスクとは 【non-preemptive multitasking】 - 意味・解説 : IT用語辞典 http://e-words.jp/w/E3838EE383B3E38397E383AAE382A8E383B3E38397E38386E382A3E38396E3839EE383ABE38381E382BFE382B9E382AF.html マルチタスク (Wikipedia) http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%BF%E3%82%B9%E3%82%AF
補足
ご回答ありがとうございました。 すみません、ちょっと質問のポイントがずれていたかもしれません。 お聞きしたかったのは、 (a)1回のループで全ての処理を終わらせる 方法 と (b)1回でなく、複数回に分けて全ての処理を終わらせる 方法 の呼び名のことです。 例えば、重たい処理を1回のループで全て順番にやっていこうとすると、 処理A→処理B→処理C→・・ と処理Cを行うときには、処理Aを行ってからかなりの時間が経過して いる可能性がありますよね? なので、それぞれの処理を細かく分けて、 1回目のループ: 処理A-1→処理B-1→処理C-1→・・ 2回目のループ: 処理A-2→処理B-2→処理C-2→・・ 3回目のループ: 処理A-3→処理B-3→処理C-3→・・ というように行わせたいのです。