Javaプロセスを特定のCPUコア(Linux上)内の個々のスレッドをロックダウンする方法を知っていますか?これをCで実行しましたが、これを行う方法が見つかりません。私の本能は、これにはJNI呼び出しが必要になるということですが、ここの誰かが何らかの洞察を持っているか、以前にそれをしたことを望んでいました。
ありがとう!
これを純粋なJavaで行うことはできません。しかし、本当に必要な場合は、JNIを使用して、ジョブを実行するネイティブコードを呼び出すことができます。これは、開始する場所です。
http://ovatman.blogspot.com/2010/02/using-Java-jni-to-set-thread-affinity.html
http://blog.toadhead.net/index.php/2011/01/22/cputhread-affinity-in-Java/
UPD:少し考えて、このために独自のクラスを作成することにしました: ThreadAffinity.Java それはJNAベースです、非常にシンプルです。したがって、本番環境で使用する場合は、より安定させるために少し時間をかける必要がありますが、ベンチマークとテストの場合はそのままで機能します。
UPD 2:Javaでスレッドアフィニティを操作するための別の library があります。前述の方法と同じ方法を使用しますが、別のインターフェースがあります
しばらく経っていることは知っていますが、誰かがこのスレッドに出くわした場合は、この問題をどのように解決しましたか。次のことを行うスクリプトを作成しました。
それは不可能です(少なくともプレーンなJavaでは)。
thread pools を使用して、さまざまなタイプの作業に使用されるスレッド(およびコア)の量を制限できますが、使用するコアを指定する方法はありません。
JavaランタイムがOSまたはハードウェアのネイティブスレッドをサポートしていない可能性もあります。この場合、 緑のスレッド が使用され、 1つのコアがJVM全体に使用されます。
IMO、これ しない ネイティブ呼び出しを使用しない限り可能です。 JVMはプラットフォームに依存しないと想定されており、これを実現するために実行されるシステムコールは移植可能なコードにはなりません。