問題タブ [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 投票する
2 に答える
1793 参照

linux - Linuxのプロセス(スレッド)IDに関連する優れた優先順位とスケジューラポリシーはどのようになっていますか?

CPUを集中的に使用するタスクをバックグラウンドで実行しているときに、Linuxデスクトップエクスペリエンスをスムーズかつインタラクティブに保つ方法を調査しています。これは、CPU負荷をシミュレートするために使用しているサンプルプログラム(Javaで記述)です。

これをコマンドラインで実行すると、デスクトップアプリケーション(テキストエディタなど)の対話性が大幅に低下することに気付きます。私はデュアルコアマシンを持っているので、これには驚いていません。

これに対抗するために、私の最初の考えは、でプロセスを改善renice -p 20 <pid>することでした。しかし、これはあまり影響がないことがわかりました。代わりに、すべての子プロセスをls /proc/<pid>/task | xargs renice 20 -p --、はるかに大きな効果を持つようなもので放棄する必要があります。

スレッドが独自のプロセスIDを持っているとは思わないので、私はこれに非常に混乱しています。renice彼らがそうしたとしても、私はプロセスのメインスレッドだけでなく、プロセス全体に作用することを期待していました。

ここで何が起こっているのかを明確に理解している人はいますか? 各スレッドは実際には別個のプロセスであるように見えます(少なくとも有効なPIDがあります)。歴史的にLinuxがこのように機能することは知っていましたが、NPTLはその数年前に修正されたと思いました。

RHEL 5.4(Linuxカーネル2.6.18)でテストしています。

(余談ですが、sched_setscheduler(<pid>, SCHED_BATCH, ..)この対話性の問題を解決するために使用しようとすると、同じ効果に気付きます。つまり、表示されるすべての「子」プロセスに対してこの呼び出しを行う必要があります。/proc/<pid>/task一度実行するだけでは不十分です。メインプログラムpidで。)

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

windows-7 - Windows 7: データのダウンロード中にプログラムで GUI の応答が遅くなります。これを改善する方法はありますか?

TCP を使用して、LAN 上のサーバーから複数の大きなファイルを (とりわけ) ダウンロードするプログラムを作成しました。このプログラムは、Linux、MacOS/X、および一般に Windows でも問題なく動作します (GUI には Qt を使用し、ネットワークには直接ソケット呼び出しを使用します)。そして、それがなぜなのか、そしてそれに対して何ができるのかについて誰かが何か考えを持っているかどうか疑問に思っています.

ファイルをダウンロードするとき、私のプログラムは別の I/O スレッドを生成します。このスレッドは基本的にはループに留まり、TCP 経由でデータをダウンロードしてファイルに書き込み、QFile:write() への呼び出しごとに 128KB を書き込みます。通常、各ファイルの長さは数百メガバイトで、通常のダウンロード セッションでは、これらのファイルが数十個書き出されます。I/O スレッドは GUI スレッドとは独立して実行されるため、GUI のパフォーマンスに大きな影響を与えるとは考えていません。特に、マルチコア PC で実行している場合はそうではありません。

問題の PC は、2.40 GHz で動作し、4 GB の RAM を搭載した Core-2Duo Quad Q6600 です。Windows 7 Ultimate SP1、32 ビットを実行しています。ギガビット イーサネット接続を介してデータを受信し、232GB の内部 Hitachi ATA ドライブの NTFS フォーマットのブート パーティション上のファイルにデータを書き込みます。

症状としては、ダウンロード中に (一見ランダムに) プログラムの GUI が一度に 10 ~ 30 秒間応答しなくなり、ウィンドウのタイトル バーに "(応答なし)" が追加されることがよくあります。その後、症状は再び解消され、ダウンロードは再び正常に進行します。もう 1 つの症状は、ダウンロード中にデスクトップが非常に遅くなることです。たとえば、[スタート] ボタンをクリックすると、[スタート] メニューがほぼ瞬時に読み込まれるのではなく、30 秒ほどかかります。 .

タスク マネージャーには十分な空きメモリが表示されますが、4 つのコアのうちの 1 つで 100% の CPU 使用率の短いスパイクが表示されると同時に、問題が見られることに注意してください。

データはギガビット イーサネット経由で到着します。プログラムにデータを受信させて (ハード ドライブに書き込まずに) 破棄させると、マシンは汗をかくことなく約 96MB/秒の一定のダウンロード速度を維持できます。しかし、受信したデータをファイルに書き込むと、ダウンロード速度が約 37MB/秒に低下し、上記の症状が現れ始めます。

興味深いのは、好奇心のために、イベント ループの開始直前に、I/O スレッドのエントリ関数に次の呼び出しを追加したことです。

すると、「(応答なし)」の症状はなくなりましたが、ダウンロード速度が約 25MB/秒に低下しました。

だから私の質問は:

  • ハードドライブの書き込み負荷が高いときに、GUI が散発的にハングアップする原因を知っている人はいますか?

  • マシンにアイドル状態のコアが 3 つあるのに、I/O スレッドの優先順位を下げるとダウンロード速度が大幅に低下するのはなぜですか? この状況では、優先度の低いスレッドでも十分な CPU を利用できると思います。

  • Windows のデスクトップの応答性やアプリの GUI の応答性に問題を引き起こすことなく、最大のダウンロード レートを取得する方法はありますか?

0 投票する
8 に答える
1286 参照

java - Win7 でマルチスレッド Java プロジェクトを実行する際の散発的な問題

私は、メモリと計算負荷の両方が高いプロジェクトに取り組んでいます。実行の大部分は、FixedThreadPool. 要するに; 複数のリモート ロケーションから (URL 接続を使用して) データをフェッチし、分析対象のオブジェクトをデータに取り込むための 1 つのスレッドと、これらオブジェクトを選択して分析を実行するn 個のスレッドがあります。編集:以下のコードを参照してくださいBlockingQueue

現在、このセットアップは、OpenSUSE 11.3 を実行している私の Linux マシンで魅力的に機能しますが、同僚が Win7 を実行している非常によく似たマシンでそれをテストしており、キューのポーリングでタイムアウトのカスタム通知を取得しています (以下のコードを参照)。私は彼女のマシンでプロセッサの使用状況を監視しようとしてきましたが、私のマシンでは意図したとおりにプロセッサの使用率が上限に達している間、ソフトウェアは CPU の 15% を超えないようです。

私の質問は、これはキューの「飢餓」の兆候でしょうか? プロデューサースレッドが十分なCPU時間を取得していない可能性がありますか? もしそうなら、プール内の特定のスレッドに高い優先度を与えるにはどうすればよいですか?

更新: 私は問題を特定しようとしてきましたが、喜びはありませんでした...しかし、いくつかの新しい洞察を得ました。

  • JVisualVM を使用してコードの実行をプロファイリングすると、非常に特異な動作が示されます。メソッドは、CPU 時間の短いバーストで呼び出され、その間に数秒間進行がありません。これは、何らかの形で OS がプロセスにブレーキをかけていることを意味します。

  • ウイルス対策およびバックアップ デーモンを無効にしても、問題に大きな影響はありません。

  • タスク マネージャー (ここで推奨) を使用して java.exe (唯一のインスタンス) の優先度を変更しても、何も変更されません。(そうは言っても、Javaに「リアルタイム」の優先順位を与えることはできず、「高い」プライオリティに満足する必要がありました)

  • ネットワークの使用状況をプロファイリングすると、データの出入りの良好な流れが示されるので、それがボトルネックではないと推測しています (プロセスの実行時間のかなりの部分を占めていますが、私はすでに知っており、 Linux マシンで得られるもの)。

Win7 OS がプロジェクトの CPU 時間をどのように制限しているかについてのアイデアはありますか? それがOSでない場合、何が制限要因になる可能性がありますか? もう一度強調したいのですが、マシンは同時に他の計算集約的な処理を実行しておらず、私のソフトウェア以外の CPU にはほとんど負荷がかかっていません。これは私を夢中にさせています...

編集: 関連するコード

このクラスQueryingActionは、指定されたオブジェクトでRunnableデータ取得メソッドを呼び出してから. このクラスは、 の 1 つのインスタンスに対してすべての数値処理を行います。QueryServiceBlockingQueueAnalysisActionMyObject

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

javascript - Webワーカーを低優先度に設定する方法はありますか?

ユーザーが自分のWebサイトを閲覧しているときに、Webワーカーを使用してバックグラウンド機能を提供することを考えています(これがWebワーカーの目的ですよね?)。ただし、スクロールが遅くなったり、コントロールが応答しなくなったりして、ユーザーエクスペリエンスが損なわれるリスクを冒したくありません。ただし、WebワーカーはOSスレッドにマップされているため、これらのスレッドの優先度をある程度制御できると思います。私が知っているように、現在のAPIにはそのようなものはありません。これを達成する方法を知っていますか?ハックしても?

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

c# - スレッドの優先度を変更する

スレッドの優先度を変更しようとしていますが、機能させることができません。優先度を低と高の間で切り替えるボタンを作成しました。ジョブリストでこれをチェックすると、優先度が変更されます。ただし、CPU 使用率は変更されません。これは、CPU パワーをフルに使用していないからなのか、それともどうしてこうなったのだろうかと思います。

私はそれが良い考えかどうか尋ねているわけではありません。やり方を聞いています。

優先順位を変更する方法は次のとおりです。これはクラスの背後にあるコードです:

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

android - スレッドの優先度を変更しても効果がない

を使用してメインスレッドの優先度を変更しようとしていandroid.os.Process.setThreadPriority()ます。優先度の変更前後にログメッセージがあります。コードは次のとおりです。

そして、次の出力が得られます。

これは、評価にどのような方法を使用しても、優先度が変わらなかったことを意味します。 android.os.Process.THREAD_PRIORITY_DISPLAY = -4、私の出力を変更した後、-4 になるはずですが、なぜ同じままですか? なぜandroid.os.Process.setThreadPriority()効果がないのですか?

android.os.Process.getThreadPriority()PS スレッドに関する Google ドキュメントを読みましたが、との違いを説明する問題に遭遇しませんでしたThread.currentThread().getPriority()。これらのメソッドが異なる値を返すのはなぜですか?

PPSThread.currentThread().setPriority()は正常に動作します。

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

linux - Linux上のCFS優先スケジューラ

子が親のcgroupを継承しないようにするにはどうすればよいですか?

私のシステムにはいくつかのcgroup階層があり、プロセスの1つが特定のcgroupの下で実行され、それがいくつかのプロセスを生成し、子はデフォルトで同じcgroupの下で実行されますが、親cgroupを継承したくありません。APIを使用してそれを行う方法はありますか?

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

linux - Nice 値と静的優先順位 (Linux スケジューリング)

SCHED_OTHERnice 値 (スケジューリングに使用) と static 値 ( SCHED_RR& SCHED_FIFO{1..99} に使用され、 に 0 が使用される)の違いを理解したいと思いますSCHED_OTHER

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

.net - .Net でのリアルタイム優先度

D2XX インターフェイスを介してオーディオ データを FTDI デバイスに供給するアプリケーションがあります。私のアプリケーションがフォーカスを持っている間は完璧に動作し、CPU の使用量はほとんどありません (5%)。しかし、(他のアプリケーションに切り替えたり、大量の描画を行ったりして) CPU を叩くと、オーディオに途切れが生じることがあります。

これを防ぐために多くのことを試みましたが (リアルタイムに対するプロセス/スレッドの優先順位、MMCSS スケジューリングなど)、それでも時々発生します。

優先順位を上げる他の方法はありますか? それとも、カーネル ドライバーを作成しないと不可能でしょうか?

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

c# - プロセスの優先度を高くする方法 (クリティカル)

外部シリアル ポートとネゴシエートする win CE アプリケーションがあります。

シリアル ポート プロトコルには、いくつかの制限された規則があります。例えば:

ANNOUNCE シグナルを受信した場合は、その後 3 ミリ秒以内に ACKNOWLEDGE シグナルを送信する必要があります。そうしないと、ネゴシエーションに失敗します。

したがって、実行中のプロセス (およびリッスン スレッドを実行中) を優先度の高いモードで実行する必要があります。OSはすべての重要でないタスクを延期/延期する必要があると思います(すべてのフォームのペイント、再ペイント、更新などが含まれます)。その結果、UI が応答しない場合がありますが、それは重要ではありません。

この目標を達成する方法/回避策があるかどうかを知りたいです。