1. ホーム
  2. java

[解決済み] スタティック・スケジューリングとダイナミック・スケジューリングの長所と短所

2022-02-26 13:07:59

質問

を見つけることができないので、この質問を開いています。 わかりやすい このトピックに関する要約された情報。このトピックについて説明した良いユーチューブビデオさえありません。

私は現在リアルタイムプログラミングを勉強しており、静的・動的スケジューリングはその一部です。ただ、どうしても理解できないのです。

静的・動的スケジューリングのメリット・デメリットを教育的に説明してくれる人がいたら、本当に助かります。

今までのところ、以下のような感じです。

  1. 静的なスケジューリング。 スケジュールを手動で生成するオフラインのアプローチです。実行中に修正することも可能だが、スレッドの納期を守るため、あまり推奨されない。実装や解析が容易である。分析が簡単なので、システムがすべての締め切りを守れるかどうかを確認するのも簡単です。

  2. ダイナミック・スケジューリング。 スケジュールが自動的に生成されるオンラインアプローチである。実行中にシステム側で変更可能であり、スレッドの納期が遅れることは(ほとんどの場合)ないはずである。システムが変更されても、スケジュールは自動的に生成されるので、新しいスケジュールを生成することは容易である。システムがすべての締め切りを守るという保証はない。

どなたか、この2つを私よりもう少し上手に説明できる方はいらっしゃいませんか?あるいは、この2つについてもっと情報を追加してください。また、画像で説明すると、より理解しやすいと思います。

解決方法は?

わかりやすく言うと

静的スケジューリング は、私たちのコード(コンパイル時)でスレッドやプロセスが実行される順序や方法をすでに制御しているメカニズムです。もし、あなたがプログラムの中でスレッドに対して何らかの制御(ロック、セマフォ、ジョイン、スリープ)を行っているならば、あなたは静的(コンパイル時)スケジューリングを使用することを意図していることになります。

ダイナミック・スケジューリング は、スレッドのスケジューリングがオペレーティングシステムによって行われるメカニズムです。 スケジューリングアルゴリズム OSレベルで実装されています。そのため、スレッドの実行順序は、何らかの制御を行わない限り、完全にそのアルゴリズムに依存することになります(静的スケジューリングによる)。

利点」という言葉は、ここでは最適な言葉ではないでしょう。単に、あるタスクを達成するためにスレッドに対する何らかの制御をコードで実装する場合、最小限の制御と最も最適化された方法で使用したことを確認する必要があります))

追加です。

スタティック・スケジューリングとダイナミック・スケジューリングの比較

一般的に、私たちは 決して に完全に依存するようなコンピュータ・プログラムは存在しない。 スタティック・スケジューリングとダイナミック・スケジューリングのどちらか一方のみ .

その代わり、コード自体からかなり制御できるプログラムもあります(強力な静的プログラム)。 これは は、その良い例でしょう。

また、プログラムによっては、強動的(弱静的)なものもあるでしょう。 これは はその良い例でしょう。そこでは、2つのスレッドが開始する以外、プログラムの実行の残りはフリーフライヤーであることがわかるかもしれません。

プログラムを静的、動的のどちらかに封印するような免責基準を見つけようとはしないでください :))

肯定的な意見と否定的な意見

  • ダイナミック・スケジューリング スケジューリングは より速く 静的スケジューリングに比べ、基本的に意図的な待ち時間や結合などがなく、フリーフライヤーであるため、実行時に (スレッド間の同期や保護が一切ない)。

  • ダイナミック・スケジューリング 気付かない どのような スレッド依存性 (安全性、同期性など)。上記のソースに従えば、おそらく見当がつくと思います。

  • つまり、一般的に、あなたがどれだけ優れたマルチスレッドプログラマーであるかは、あなたのタスクを成功させるためにスレッドにどれだけ制限、依存、ボトルネックを実装したかに依存することになります。)

かなり多くのことをカバーできたと思います。何か質問があれば言ってください。)