問題タブ [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.
c# - プロセス コンテキストの切り替えに費やされた時間の概算を測定するにはどうすればよいですか?
C# でプロセス コンテキスト スイッチのおおよその時間を測定する可能性はありますか? はいの場合、どのように?
この質問は、 Cracking the Coding Interview: 150 Programming Questions and Solutionsという本に基づいて作成しました。
彼らの解決策は次のとおりです。
P1 と P2 の 2 つのプロセスしかないとします。(これは大まかな概算です。より正確な概算があると思います)
P1 は実行中で、P2 は実行を待機しています。ある時点で、OS は P1 と P2 を交換する必要があります。これが P1 の N 番目の命令で発生すると仮定しましょう。したがって、この場合のコンテキスト切り替え時間は次のようになります。
問題の 1 つは、プロセス内のすべての命令のタイムスタンプを記録できないことです。また、他のプロセス間のコンテキスト切り替えにかかる時間は考慮していません。
c++ - オーバーライドされたタイマー割り込みが正しく機能しない
私は大学のプロジェクトとして小さなカーネルに取り組んでいます。タイマー割り込みルーチンをオーバーライドしました(それが正しい式かどうかはわかりません)。
最初のコンテキスト切り替えまではうまく機能します。コンテキストの切り替えはdispatch()で行われ、プロセスが指定された時間(タイムアウト)をすべて使用したときに呼び出されます。
私のルーチンはメインプロセスが開始する直前に初期化され、それが完了した後に復元する必要があります(私はそれに到達したことはありませんが)。また、プロセスが開始されるたびに初期化し、コンテキストの切り替え中またはそのプロセスが終了したときに復元してみました。2005年から完成したプロジェクト(わずかに異なる)があり、コピーして貼り付けるのではなく、アイデアを探しているので、これを試しました。
タイマー割り込み:
新しいルーチンの初期化と古いルーチンの復元:
私が実行するプロセス:
//modはidのようなものです
プログラムを実行すると、次のようになります。
init Test1 time:0 //プロセス1から、開始したことを示し、2サイクル実行する権限があり、現在の時間は0です。
0//タイマールーチンの開始時の現在時刻
1//タイマールーチンの開始時の現在時刻
Test2 time:2 //プロセス2から開始され、2サイクル実行する許可があり、現在の時間は予想どおり2です。
私はcout<<System::currentTime;を入れました。br ++の後のrun()で。私が得たのは、「2」が無限に印刷されることでした。これは、currentTimeが増加しないことを示しています。つまり、タイマールーチンが呼び出されなくなりました。
私はこの問題をさまざまな角度から見て、さまざまな方法を試しましたが、何も機能しませんでした。ありとあらゆるアイデアを歓迎します。[:
linux-kernel - Executing block of code without context switch
Is there any way to execute a block of code in C without suffering a Context Switch?
I have modified perf stat to sample the counters periodically. While this works, it ends up giving me some bad data points such as 0 cycles x instructions.
I believe that the reason for this happening is because of context switching.
Since my code always pulls cycle counter value before instruction counter, if a context switch were to happen after pulling the cycle counter value, and if the process I was profiling executed for some portion of the scheduling quanta, then when I finally pulled the instruction counter value, it would be 'one ahead' of the cycle counter value that I already pulled.
Is there any way to execute the code-block without allowing a context switch to take place?
c++ - スレッドローカルとコンテキストスイッチ
スレッド ローカル ストレージを利用する C++ コードがいくつかあります。各スレッドには、データをプッシュできるベクトルがあります。
TLS を使用してスレッドごとにインデックス ID を保存します。これを使用して、データをプッシュするベクトルを検索できます。次に、データをベクターにプッシュするかなりの量のコードを実行します。
私が疑問に思っているのは、OS がスレッド ローカル オブジェクトへのポインターを取得した後、別のスレッドで実行するようにコードを再スケジュールする可能性があるかどうかです。(これまでのところ、コードは正常に実行されますが、これが発生したことはありません)。しかし、2 つのスレッドが同じオブジェクトを持つことが可能になるため、これが可能であるとすれば、私のプログラムが壊れることは間違いないようです。
これが真実であると仮定すると、複雑な TLS を使用するコードでも問題になるように思われますが、TLS はアドレスを取得しない単純なオブジェクトのみを対象としていますか?
ありがとう!
c - makecontext uc_link でセグメンテーション違反が発生する
pthreads のようなユーザー レベルのスレッド ライブラリを作成しようとしています。私はmakecontext() / swapcontext()を使用してスレッド間の切り替えを行い、スレッドのコンテキストを作成しながら、コンテキストのuc_linkフィールドにuctx_mainを渡しています。
ただし、スレッドが終了すると、セグメンテーション違反が発生します。私のメインプログラムはまだ実行中です。
また、誰かがuctx_mainとは何かを説明できますか? メイン関数のデフォルトのコンテキストですか? 作成するスレッドごとにuctx_mainが必要ですか? このようなばかげた質問をして申し訳ありませんが、ググっても何も見つかりませんでした。
zend-framework2 - Zend_Controller_Action_Helper_ContextSwitchと同等のZF2?
ZendFramework2に似たようなものが見つかりません。
signals - シグナルハンドラでswapcontextを使用する
pthreadsのようなユーザーレベルのスレッドライブラリを構築しようとしています。
シグナルハンドラー内でswapcontextを使用したい。ただし、信号安全機能ではないため、使用しないことをお勧めします。誰かがシグナルハンドラー内でそれを使用する方法を提案できますか?信号を無効にして使用できますか?
また、誰かが私に信号安全機能の正確な意味を説明してもらえますか?
c - windows-XP の C で、各コンテキスト スイッチの直後に関数を実行する
Windows XP で C 言語でマルチスレッド アプリケーションをプログラミングしています。アプリケーションのスレッド間の各コンテキストスイッチの直後(および新しいスレッドの開始直前)に、関数を実行する方法を探しています。より正確には、特定のメモリアドレスに、どのスレッドに参加したかに応じて異なる値を割り当てたいと考えています。
助言がありますか?
c++ - sigsetjmp と longsetjmp による環境の復元
システムコールを中断するために、SIGALARM で sigsetjmp と singlongjmp の組み合わせを使用しています。これを次のコードに示します。
sigsetjmp が 1 を返す前は、オブジェクトとメソッド ポインターを使用した呼び出し: *pt2Object.*fpt("timeouted before sigsetjmp") は問題ありませんが、sigsetjmp が 1 を返した後、この呼び出しは失敗しました。変数の状態を調べたところ、オブジェクト ポインター "pt2Object" はまだ問題ありませんが、メソッド ポインター "fpt" は異なるようです。
考えられる理由の 1 つは、sigsetjmp がメソッド ポインター「fpt」を含む以前の環境全体を復元できないことです。
この問題を解決するのを手伝ってくれませんか。本当にありがとう!