問題タブ [thread-priority]

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 投票する
3 に答える
5332 参照

c# - .netでスレッドの優先度を最低から最高に変更します

あるスレッドがリンクリストに書き込み、別のスレッドがリンクリストを処理することで、処理を高速化しようとしています。

何らかの理由で、リンクリストに書き込むメソッドをタスクにし、リンクリストから優先度の低いスレッドを読み取るメソッドを使用すると、プログラムは全体としてはるかに高速に終了します。言い換えれば、私は次のことを行うときに最速の結果を経験します。

おそらく、最初のタスクが他のスレッドよりも多くの余分な作業を行っているため、2番目のメソッドの優先度を低く設定すると、全体としてすべてがより速く終了します。

とにかく今私の質問はstartProcessingItemsThreadPriority=Lowestでの実行です。優先度を最高に変更するにはどうすればよいですか?そのメソッドで新しいタスクを作成した場合、そのタスクは低い優先度で実行されますか?基本的に、startProcessingItemsはリストで終わります。リストができたら、最高の優先度で実行を開始します。

0 投票する
0 に答える
72 参照

.net - 1つのタスクで複数の作業を行う

複数の作業項目を 1 つのタスクにスケジュールしたい、つまり、1 つのタスクが次々とタスクを実行するようにしたい。タスクの .continuewith() 機能について知っています。私の問題には2つの部分があります:

最初の問題は、そのタスクの優先度もスケジュールしたいということです。この投稿で romkyn が提案したスケジューラーを使用しています。

同じタスクが同じ優先度レベルで複数の作業を実行する方法はありますか?

100 を超えるタスクを生成し、ランダムに割り当てられた優先度レベル (最低、通常より上、最高) でスケジュールします。

生成および実行段階で、より優先度の高いタスクが生成されて待機できない場合、タスクキャンセルトークンを使用して実行中のタスクを (a) 知り、(b) キャンセルするにはどうすればよいですか?

今のところ、単純な for ループと taskfactory を使用してタスクを生成しています。

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

java - スレッド化:最大優先度スレッドが常に最初に完了するとは限りません

私はこのプログラムを数回実行しました。最大優先度のスレッド「C」が最後に完了する場合があります。最大優先度では、最初に終了することが保証されませんか?つまり、他のスレッドがループを終了する前ですか?そうでない場合、スケジューラポリシーは何ですか?

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

java - Java / スレッドの優先順位付け

着信パケットをリッスンするために 4 つのスレッドを開始するアプリケーションがあります。すべてのスレッドは、異なるポートでソケットを開きます。通常、パケットは一度に 1 つのポートだけで受信されますが、場合によっては、メッセージが 2 つのポートで数秒間受信されることがあります。これらのスレッドのそれぞれがメッセージを処理し、一連のリスナーを更新します (それらはすべて Swing の描画処理を行っています)。メッセージは 10 Hz の頻度で送信され、Swing コンポーネントのペイント アクションには時間がかかるため、最初のアプローチは 20 のメッセージのうち 1 つだけを処理することでした (コンポーネントのペイントを完了するのに 2 秒かかります)。うまく機能します...

しかし、一度に 2 つのメッセージを受信した場合、そのうちの 1 つ (短時間だけ受信したもの) だけを処理するようにアプリケーションに指示する必要があります。要約すると、10 メッセージが 2 番目のポートで受信され、周波​​数も 10 Hz です。つまり、最初のアプローチを使用すると、20 のうち 1 つしか処理されないため、10 個すべてを見逃すことがあります。

2番目のポートでメッセージが受信されるたびに、アプリケーションでそのメッセージを処理したいのですが、1番目のポートで何を受信したか、その時点で何かが描画されているかどうかは関係ありません。

次のコードは、私のスレッドの実装を示しています。これらのうちの 4 つは、コンストラクターを介して指定されたポートに応じて同時に開始されます。

更新: リスナーを更新するために新しいスレッドを開始する理由は、すべてのスレッドが同時に GUI を更新する必要があるためです。Everyは異なる でメソッドをupdated呼び出します。したがって、それらはすべて一緒に実行する必要があります。paintComponent()JPanel

更新 2: 重要なメッセージ (2 番目のポートで受信) が失われる可能性があるため、最初のアプローチは使用できません。私が必要とするのは、通常のメッセージが受信されたときに、それを処理して描画を行うだけで、(1 番目のポートで) 新しい通常のメッセージがいくつ入っても関係ありません。しかし、2 番目のポートで 1 つのメッセージしか受信されない場合でも、アプリケーション通常の受信スレッドで何が起こっているかに関係なく、それを処理する必要があります。

ここで2つの問題に直面していると思います:

  1. 描画が完了するまで各スレッドを待機させる必要があります。これは UDP であるため、描画アクション中に通常のパケットを処理し、後続のすべての通常のパケットを忘れることができます。完了したら、次の通常のパケットを処理します。

  2. 2 番目のポートでパケットを受信した場合は、通常のパケット処理アクションをすべて中断し、特別なパケットの処理に必要な処理を行います。

問題 (1) は、MainIncomingClass の BitSet を使用して解決されます。すべてのリスナーは、ある種のコールバック関数を使用して、ペイントが完了したことを示し、BitSet に特定のビットを設定します。すべてが真ではない場合、新しいパケットは処理せず、手放します。

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

c# - console.readline でスレッドの優先順位を設定しますか? c#

ユーザーに文字列 (Lowest、BelowNormal など) を入力させることで、スレッドの優先度を変更できるかどうか疑問に思っています。私の知る限り、「ThreadPriority」は列挙型ですが、その方法がわかりません。

belowNormal をユーザーが入力したもの (ReadLine) に変更するにはどうすればよいですか?

ありがとう!

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

android - Androidでスレッドまたはアプリケーションに高い優先度を割り当てる方法はありますか?

UDP パケット (ストリーミングされている) を受信し、受信したときにすぐに再生する Android アプリを作成しました。Android携帯電話で別のアプリをクリックするまで、アプリは正常に動作しますが、その時点でクリックノイズが聞こえます。

これを乗りこなす方法はありますか?パケットの受信と再生を担当するスレッドに高い優先度を割り当てることができれば、またはこのアプリに高い優先度を割り当てることができれば、これが役立つかもしれないと考えました。

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

android - Androidアプリで、現在のスレッドの優先度を1未満に設定すると、強制終了が発生します

次のように入力して、アプリケーションのスレッドの優先度を上げようとしています。

現在のスレッドの通常の優先度は5ですが、1まで変更できますがN、0または-1にすると、電話に強制終了メッセージが表示されます。

このスレッドの優先度を上げることができない理由はありますか?

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

linux - SCHED_FIFO と SCHED_RR はどのように干渉しますか?

SCHED_FIFO と SCHED_RR はどちらもリアルタイムで使用するためのものです。SCHED_RR はタイム スライスによってプリエンプトされる可能性があることは承知しています。しかし、1 つのスレッドが SCHED_FIFO に設定され、別のスレッドが SCHED_RR に設定されている場合、両方のスレッドが実行できる状態になっている場合、それらは純粋に優先度によってスケジュールされているのでしょうか? 優先度が同じ場合はどうなりますか?

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

linux - 優先度に基づくスレッド (プロセスではない) のスケジューリング

2 つのスレッドを含むプロセスがあります。に基づいてスケジュールを設定したいpriority(SCHED_RR policy)。t1、t2 がこれらのスレッドを表し、どちらも最初は優先度 1 (最低) を持っているとします。

重要なタスクの実行中にスレッド t1 がプリエンプト/再スケジュールされないようにしたいので、重要なタスクの前にその優先度を最大に上げ、重要なタスクの後に元の値に減らします。

printf()スレッド t1 で呼び出した後、スレッド t2 のコマンドが実行されないことを期待していますset_priority_max()。ただし、出力にはスレッド t2 からのプリントも含まれます。

  1. これはなぜですか?

  2. どうすればこの問題を解決できますか?

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

c - CでのPosixスレッドの優先順位

A thread which is joined to another can't continue its execution untill the thread to which it is joined has been completely executed or terminated.

上記のスレッド特性に従って、次のコードで作成する最後のスレッドも、プロシージャ内でステートメントを出力する必要Func()がありますが、そうではありません。何故ですか?

次に、priorityこのプログラムで作成したスレッドを設定できません。私は何かが足りないのですか?

コードは次のとおりです。