1

複数のスレッドが並行して実行される Java のマルチスレッド アプリケーションがあります。ここで、これらすべてのスレッドを単一のコアで実行したいと考えています。現在、アプリケーションは複数のコアを持つシステムで実行されています。

プロセス アフィニティを設定するために、.Net Framework の ProcesAffinity で利用できる手法があることがわかっています。

しかし、私たちのアプリケーションは Java で構築されているため、.Net Framework に依存したくありません。

Bat ファイルを使用してプロセス アフィニティを設定し、Bat ファイルを介してアプリケーションの実行可能 jar ファイルを実行しますか?

現在、アプリケーションは Window XP で実行されています。そのため、XP プラットフォームで正常に動作するソリューションが必要です。

4

3 に答える 3

4

編集:

可能です: Java スレッド アフィニティを参照してください。


Pure Java は、特定のプロセッサでのスレッドの実行をサポートしていません。上記のリンクにある SO の質問を確認してください。

于 2012-12-20T09:59:38.073 に答える
1

個人的には、これが純粋な Java で設定できないことは悪いことではないと思います。私にとって、アプリの実行方法は OS に大きく依存するため、OS 固有のソリューションはありません。悪いこと。

MS psexecユーティリティを使用して、アフィニティを設定できます。

psexec -a 1 java -jar myapplication.jar

Java によって作成されたすべてのスレッドが最も低い CPU で実行されるように指示します。

そして、この行はあなたの.BATファイルになります...

于 2012-12-20T10:10:44.733 に答える
0

純粋なJavaではできません。ただし、Windows の一部のバージョンでは、オペレーティング システムのユーティリティを介して実行できます。https://superuser.com/questions/309617/how-to-limit-a-process-to-a-single-cpu-core ... を参照してください。JNI 経由でネイティブ ライブラリを呼び出すことで、これを実行できる場合があります。

于 2012-12-20T10:03:01.250 に答える