コンテキストスイッチ時間は純粋なオーバーヘッドであり、使用できません。私はどのようにしてコンテキスト切り替え時間を短縮できますか?もっと多くのレジスタを使用していますか?コンテキストスイッチ時間をどのように減らすのですか
答えて
はオペレーティングシステムですか?コンテキスト切り替え時間は、保存/復元する必要のあるレジスタに依存します。時間を節約できる方法の1つは、新しいプロセッサー上のAVX拡張機能を使用することです。これにより、すべてのレジスターを1つのメモリーブロックに保存/リストアすることができます。
いいえ私はオペレーティングシステムを書いていません。これは、インタビューで尋ねられました –
コンテキスト切り替え時間を直接変更することはできません。コンテキストスイッチで時間を費やすことを避ける唯一の方法は、CPUよりもアクティブなスレッドの割り当てを避け、スレッドをブロックしないことです(つまり、スリープまたはクリティカルセクション経由で) –
コンテキストサイズを最小化したり、コンテキストスイッチを回避したりしないでください。どのように正確に行うのかは、コンテキスト(あなたが切り替えるコンテキストではなく、問題のコンテキスト、CPU、OSなど)によって異なります。
x86 CPUでは、浮動小数点ユニットの状態が変わらない場合に不要な保存と復元を避けることができます。これは、コンテキスト切り替え中にCR0
のtask switched
ビットを1に設定し、次に新しいスレッドの最初のFPU命令から発生する特別なCPU例外を待つことによって行われます。それが発生すると、古いスレッドのFPU状態を保存し、現在のスレッドのFPU状態をロードし、CR0.TS
をリセットして、そのFPU命令で実行を再開します。スレッドが出て行っても例外は発生しない場合は、スレッドがFPU作業をしておらず、フルコンテキストスイッチを実行していないことを意味します。
真ですが、最新のプロセッサ[TSフラグ](http://stackoverflow.com/questions/2711044/why-doesnt-linux-use-the-hardware-context-switch-via-the-tss) – doug65536
ロック競合を最小限に抑えるスレッド化ポリシー、同期メカニズム、およびデータ構造を実装することは、プログラマに任されます。あるスレッドが別のスレッドによって既に獲得されているロックを取得しようとすると、それは非常に短時間で解放されることを望んで、何度かポーリングしてコンテキストスイッチを放棄して実行することを望んでいます。
この質問がLinux管理者の観点からのものだった場合、最小タイムスライス(sched_latency_nsとsched_min_granularity_nsを参照)を増やすか、プロセッサーの需要が利用可能なプロセッサの数余分なプロセッサーを使用するとコンテキストスイッチ率が大幅に低下します。既存のプロセッサーを「切り替える」必要はなく、アイドル状態のプロセッサーを使用できます。
私は[this](http://stackoverflow.com/questions/8868135/how-do-we-reduce-context-switch-time#comment11081651_8868147)に答えました。 – doug65536
- 1. Androidレイアウトでテキスト間の行間隔を減らすにはどうすればよいですか?
- 2. PHPで12時間から24時間の間にどのように変換しますか?
- 3. 次のコードの "Cyclomatic Complexity"をどのように減らすか
- 4. どのようにアンドロイドでProgressDialogのサイズを減らすには?
- 5. C++:時間と現地時間でどのように実際の時間を取得するのですか?
- 6. mousemoveイベントからの減速をどのように減らすことができますか?
- 7. DateTime error 0時間から減算
- 8. 3つのスイングチェックボックスの間のスペースを減らすにはどうすればよいですか?
- 9. C#でインタフェース遅延をどのように減らすのですか?
- 10. JDBC:Oracleでどのように時間をクエリできますか?
- 11. ガーランドのヘッダの高さをどのように減らすのですか?
- 12. WordPressサイトでCPU時間の使用を減らす方法は?
- 13. HTMLテーブルのセル間のギャップを減らすにはどうすればよいですか?
- 14. highcharts.jsでyaxisポイント間のスペースを減らすにはどうすればよいですか?
- 15. シンガポールと日本の2つのEC2サーバ間のデータ待ち時間を減らすにはどうすればよいですか?
- 16. NotFoundHttpExceptionの重大度をどのように減らすのですか?
- 17. どのようにディスクの読み書きオーバーヘッドを減らすのですか?
- 18. C#テキストボックス内の値からどのように減算するのですか?
- 19. どのようにタブの高さを減らすには?
- 20. 現在の時間(hh:mm)から12時間の形式の最後の5時間をハイチャートで表示するにはどうすればよいですか?
- 21. 24時間から12時間に変換するにはどうすればよいですか?
- 22. どのように私は時間をsscanですか?
- 23. ComboBoxのDropDownHeightを減らすにはどうすればよいですか?
- 24. スタックトレースの出力を減らすにはどうすればよいですか?
- 25. ストアドプロシージャの重複を減らすにはどうすればよいですか?
- 26. ダイアログのパディングを減らすにはどうすればよいですか?
- 27. 2時間の間に数時間を取得するにはどうすればよいですか?
- 28. どのように表示する12時間の形式で時間iphoneで
- 29. どのようにメモリ消費を減らすには?
- 30. 変換ベクトルの時間の複雑さを減らす方法
コンテキストの切り替えが役に立たないとは言いません。あらゆる種類の「マルチタスク」システムを実装することが基本です。コンテキストスイッチがかかる時間が純粋なオーバーヘッドであると言うと、IMHOは過度の単純化です。追加を行う時間がオーバーヘッドであると言っているようなものです。物理マシン内での処理には時間がかかります。また、使用可能なレジスタの数は、命令セットとABIの規則によって定義されます。 –
Valid Point @BasileStarynkevitch、私はこの質問にもっと注意を払うべきでした。 –
「もっと登録しているのは私たちがそうするのを助けていますか? – Mikhail