問題タブ [context-switch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1320 参照

windows - 複数のプロセスからのスレッドが実際に同時に実行されていますか

2つの物理x86/amd64プロセッサ(P0 + P1)を備えたWindowsオペレーティングシステムで、それぞれ2つのスレッド(T0 + T1)を持つ2つのプロセス(A + B)を実行すると、次のことがわかります(または一般的です)。

P0:A:T0同時に実行P1:B:T0

次に、1(またはその2?)コンテキストスイッチの後

P0:B:T1同時に実行P1:A:T1

一言で言えば、マルチプロセッサマシンでは、オペレーティングシステムが、他のプロセスの他のスレッドがすでに実行されているかどうかに関係なく、いつでも任意のプロセスからのスレッドを自由にスケジュールできるかどうかを知りたいです。

編集: ばかげた例を明確にするために、プロセスAのスレッドA:T0がプロセッサP0(およびA:T1からP1)に親和性があり、プロセスBのスレッドB:T0がプロセッサP1(およびB:T1からP0)に親和性があると想像してください。 )。これらのプロセッサがコアであるかソケットであるかはおそらく問題ではありません。

プロセスコンテキストスイッチのファーストクラスの概念はありますか?Perfmonは、Threadオブジェクトの下にコンテキストスイッチを表示しますが、Processオブジェクトの下には何も表示しません。

0 投票する
3 に答える
2662 参照

embedded - コンテキストスイッチ時間-RTOSとプロセッサの役割

コンテキストスイッチの時間を決定する際に、RTOSが主要な役割を果たしますか、それともプロセッサが主要な役割を果たしますか?コンテキストスイッチ時間を決定する際の、これら2つの主要なプレーヤー間のシェアのパーセンテージはどれくらいですか。

誰かがuC/OS-II RTOSに関して言うことができますか?

0 投票する
2 に答える
620 参照

c - ContextSwitch時間Cの測定(Windows)

Windowsのスレッド間のコンテキストスイッチの時間とCPUサイクルを測定できるメソッドを実装する必要があります。

これが私のコードです

注:2で割るのは、initialTimeStampとfinalTimeStampの間に2つのコンテキストスイッチがあるためです。

これが最善の方法なのか正しい方法なのかわかりません...実行ごとに異なる時間が発生しますが、これは私が期待していたことではありません。CPUサイクル数を取得する方法がわかりません。

0 投票する
2 に答える
4176 参照

c# - Process.Start()が同じユーザーの下で新しいプロセスを生成しない

(domain\user) mydomain\myuserとしてプロセスを実行している場合、Process.Start()それを使用すると、同じ資格情報を使用してこの新しいプロセスが開始されるという印象を常に受け​​ていましたmydomain\myuser

私が抱えている問題は、Process.Start()呼び出しが SYSTEM アカウントでプロセスを作成しているように見えることです。これにより、開始されたプロセスで権限の問題が発生しています (作業のために管理者アカウントで実行する必要があります)。変更があった場合 - Windows インストーラー内からこのプロセス (カスタムビルドの exe) を生成しています。

助言がありますか?これに影響を与える Windows グループ ポリシー (おそらく) について読んだことがありますが、正直なところ、それは私にはわかりません。

編集:小さなスニペット:

およびはexenamecommandLineこのメソッド本体のパラメーターです。

0 投票する
1 に答える
1887 参照

linux-kernel - Linux カーネルでは、データ構造 thread_struct にフィールド esp0 と esp の両方が含まれていますが、違いは何ですか?

これは私の推測です:

esp0 は、カーネル スタックのトップ アドレスで初期化されます。カーネル スタックが割り当てられ、プロセスの切り替え中に tss->esp0 を初期化するために使用されます。これにより、コンテキストがユーザー モードからカーネル モードに切り替わったときに、カーネル スタックを見つけることができます。一方、esp は、プロセスの切り替え中にスケジュールされるプロセスのカーネル スタック トップを保存するために使用されます。

したがって、thread_struct の esp0 は初期化されると変更されませんが、esp は変更されます。

私の推測は正しいですか?

0 投票する
1 に答える
1050 参照

multithreading - Windowsでコンテキストスイッチの通知を受け取る方法(7)

一部のRTOSの場合、カーネルがスレッドに切り替わるとき、またはスレッドから切り替わるときに呼び出されるイベント、またはコールアウト関数があります。pSOSでは、TaskSwitchCalloutと呼ばれていました。これには、カウンターをインクリメントするコードがあり、スレッドが費やしているCPU時間を知ることができます。Qnxでは、カーネルがタスクを切り替えたときに発生するイベントをサブスクライブして、同じカウンターインクリメントを実行できます。

Windowsに同等のものはありますか?多くの場合、Windowsでは、システムで実行されている他のスレッド(read:managed code)と比較して、スレッドコンテキストがいつオンまたはオフに切り替えられたかを正確に判断できません。

なぜ私がこれをやろうとしているのか聞かないでください、私はそれについて話すことができません。ただし、Windowsのperfmonのコンテキストスイッチカウンターでは不十分だと言えます。しかし、perfmonのコンテキストスイッチカウンターはどこかから情報を取得する必要があると思います...スレッドごとにどこかにアクセスしようとしています。

ありがとう!!

0 投票する
2 に答える
3658 参照

javascript - JavaScriptでコンテキストスイッチをシミュレートしますか?

私はJavaScriptで非常に複雑なシステムを実装することに取り組んできました。これは、とりわけマルチスレッドプロセスをシミュレートする必要があります。実際のマルチスレッドプロセス(カーネルスレッドなど)では、コンテキスト切り替えによってスレッドを切り替えることができます。これが機能するのは、現在のプロセスのプログラムカウンターとレジスターを一時的な構造に保存し、プログラムカウンターとレジスターを他のプロセスに復元してから、前のプロセスで中断したところから再開できるためです。

JavaScriptでこれに似たものを使用できるかどうか知りたいです。私は現在これを行う方法を知らないので、協調マルチタスクを使用してシステムを設計しています。特に、マルチスレッドシミュレーターで実行したい「関数」は、関数の配列に分割されます。「関数」を実行するには、関数の配列全体を反復処理し、次に実行する関数の「プログラムカウンター」を維持しながら、各関数を順番に実行します。これにより、配列内の関数の1つを呼び出し、関数が戻るのを待ってから、実行する必要のある他の関数の配列に切り替えることで、コンテキストスイッチをシミュレートできます。

私の現在のアプローチは機能しますが、このシステムでコードを書くことは困難です。各関数は、いつ中断できるかを具体的に示す必要があります。配列内の関数はすべて別個であるため、関数の異なる部分間でデータを通信するためのロジックは複雑です。代わりに、プリエンプティブマルチタスクが機能するようになることを望んでいました。

私の質問は、外部ソースによって一時停止および再開できる方法で任意のJavaScript関数を実行することは可能ですか?

0 投票する
4 に答える
1612 参照

java - Java は配列の要素へのマルチスレッド アクセスをどのように管理しますか?

こんにちは仲間のプログラマー。すでに1 つの質問をしましたが、非常に良い回答が得られたにもかかわらず、問題を解決できませんでした。次に、時間をかけてコードをリファクタリングし、並列化の可能性を向上させました (計算バッチを減らし、それぞれの計算負荷を高くすることにより)。しかし、それでもシリアル処理よりも優れたパフォーマンスは得られません。

この並列処理の遅さは、コンテキストの切り替えによるものと思われます。または、共通オブジェクトの「自動」同期が原因である可能性があります。何が起こっているのかを理解するのを手伝ってくれると思います。

私の場合を述べさせてください。私は科学計算用のプログラムを作成しています。外部のものに依存するのではなく、開始時に与える入力値に依存します。この問題のサイズはNs(私が使用する名前です) で測定できます。これは解の「解像度」と見なすことができ、ユーザー入力の 1 つであり、通常は 100 程度です。

このように、メイン クラスに doubleys[Ns][N]やなどの double 配列がいくつかありますphiS[Ns][Nord][N]。ここで、N と Nord はプログラムの他の固定された大きさです。私のプログラムでは、Nsポイントごとにいくつかのことを計算する必要があり、ここで並列化が行われます。各点の計算は独立しているので、それらを別のスレッドに分割して、より高速になることを願っています。

そこで、ループを作成する代わりに、for (int i=0; i<Ns; <i++)この計算義務を Runnable バッチに分割しました。それぞれのバッチの範囲は、より小さな間隔: ですfor (int i=start; i<end; i++)。ここで、開始と終了は常に 0 から Ns の間です。たとえば、デュアル コア PC を使用している場合、2 つのバッチを作成します。1 つはstart = 0end = Ns/2で、もう1 つはstart = Ns/2end = Nsです。私がクアッドコアを使用している場合、2番目のバッチも必要start = Ns/4end = Ns/2なります(すべてのケースで分割が正確であると仮定して)。

Runnable を実装するクラスとしての各 Batch は、 に格納され、コアの数に等しいサイズArrayList<Batch>の に与えられます。FixedThreadPoolバッチを実行し、単純なCountDownスキームを使用して終了するのを待ちます。

このバッチのそれぞれは、プログラムのメイン クラスからこれらの配列のデータにアクセスする必要がありますが、それらのアクセスは、各バッチが からのみ読み取るyS[start][]ためyS[end][]、2 つのバッチが同じ配列要素を読み取ろうとすることは決してありません。各バッチが他のバッチと同じ要素にアクセスしようとしていないとしても、Java はまだ yS をロックするのではないかと思います。

私の問題は、各バッチが何千もの double を処理する必要があるため、コンテキストの切り替えによるオーバーヘッドに関連しているのか、プログラムの構築方法がそれに影響を与える可能性があるのか​​ も疑問に思います。

関連する配列の要素だけを各バッチに渡す方法を見つける必要があるかもしれませんが、これにアプローチする方法はわかりません。ポインターがあれば、単純なポインター操作で、何も再割り当てすることなく、必要な要素だけの新しい配列を作成できます。Javaでそのようなことを行う方法はありますか?

最後に、同期が必要なコードの一部 (他の配列を処理する部分) があり、それは既に正常に動作しています。上記で説明したこの計算の義務は、私のプログラムが行う唯一のことではありません。それらはループ内にあり、順次処理部分と交互になっていますが、合計実行時間としては非常に重要です。

要約すると、質問は次のとおりです。期待していたのに、なぜマルチスレッドで得られないのですか?

ここでプレーンシリアルとマルチスレッドプログラムを数回実行したところ、シリアルで14500ミリ秒、マルチスレッドで15651ミリ秒になりました。どちらも同じデュアル コア上にあります。その他の注意事項: シリアル実行では、各計算デューティ (0 から Ns) に約 1.1 から 4.5 ms かかります。デュアル スレッドから、各バッチ (Ns/2 ポイント) には約 0.5 ~ 3 ミリ秒かかります。(run()メソッドの上から下まで計測。数値収束の仕方により毎回の計算負荷が異なります)

ご清聴ありがとうございました。

0 投票する
2 に答える
5763 参照

php - Zend ActionHelperContextSwitchを使用したカスタムJSON応答オブジェクトの作成

通常、エンコードされたjsonオブジェクトを応答の本文に追加しますが、ContextSwitchアクションヘルパーを使用する必要がある状況になりました。

3つの異なる応答コンテキストを必要とするZend_Formがあります。

  1. html-レイアウト内で通常のhtmlとしてフォームをレンダリングします
  2. html- partial-フォームだけをhtmlとしてレンダリングするajax「get」リクエスト。
  3. json-フォーム検証エラーメッセージを返すajax「post」リクエスト。

コンテキストごとに、3つのビュースクリプトがあります。2つのhtmlコンテキストで同じビュースクリプトを使用できますが、これが可能かどうかはわかりません。

  • form.phtml
  • form.html.phtml
  • form.json.phtml

htmlコンテキストビューは正常に機能しますが、jsonビューは取得されていません。デフォルトのjsonpostコールバック動作をオーバーライドする、またはカスタムエンコードされたオブジェクトを応答本文に渡すための最良の方法は何ですか?

0 投票する
1 に答える
1767 参照

mysql - Linux でコンテキスト スイッチの原因を特定する方法はありますか?

vmstat はコンテキスト スイッチを通知し、MPSTAT は intr/s を通知することを知っています。しかし、コンテキスト スイッチが生成されている理由を特定するにはどうすればよいでしょうか。どのプロセス/割り込み/スレッドが切り替えをトリガーしていますか?

私は持っている:

Red Hat Enterprise Linux Server リリース 5.2 (Tikanga)

システムがビジーでない場合のコンテキストの切り替えは 10K ですが、ビジーの場合は 40K になります。このサーバー ボックスの MySQL はビジーですが、何がコンテキスト スイッチを動かしているのかを理解したいと思います。