2012-05-04 12 views
4

可能性の重複:
Java thread affinityJavaでは、各スレッドが1つのコアで専用に実行されるようにスレッドを作成するにはどうすればよいですか?

私は、サーバーを持って、それは16コアのCPUを持っています。

Javaでは、いくつかのスレッドを作成する必要があります(スレッド数は16未満です)。各スレッドは、いくつかの操作、例えば、イベントキューを処理する必要がある。

各スレッドが1つのコアに永久に割り当てられるように、これらのスレッドを作成するにはどうすればよいですか?つまり、OSが1つのスレッドでコアを交換したくないということです。私はちょうど1つのスレッドが固定コアで専用に実行されていることを望みます。

できますか?


私はこれをしたい理由は

は、私はいくつかのバックグラウンドタスク(計算集約型)と同じサーバ内の一部のユーザー向けのタスクを処理です。私はユーザー側に悪影響を与えたくありません。たとえば、計算タスクが16コアに割り当てられている場合、ユーザー側で実行されているスレッドには悪影響があります。

+2

この理由を説明できますか? – davmac

答えて

5

JVMはすべてのハードウェアを仮想化しますので、そのようなことはできません。

いくつかの特定のアーキテクチャーと特定のJVMで動作する「トリック」があるかもしれませんが、すべてがハッキリで信頼できません。

1

OSスケジューラはスレッドをコアに割り当てるためのものではありません。 Javaアプリケーションを実行するJVMにはアクセスできません。

1

すべきではありません。あなたは本当に、あなたはネイティブの通話に使用することができますしたい場合は

Java thread affinity

しかし、実際には、これを行うには十分な理由を持っているようにしてください。なぜそれは良い考えだと思いますか?

+0

私はバックグラウンドタスク(計算量が多い)と同じサーバー内のいくつかのユーザー向きのタスクを処理するので、私はそれをやりたいと思っています。私はユーザー側に悪影響を与えたくありません。たとえば、私の計算タスクが16個のコアに割り当てられている場合、ユーザ側で実行されているスレッドには悪影響が及ぶでしょうか? –

+0

それは悪い理由です。プロセッサの使用を制限するためにコンピュータを管理することができます。これは、タスクをコアから離れることなく見ることができます。 –

+0

@ JacksonTale基本的には、GUIスレッドに最高の優先順位を与えて、あなたは良いでしょう。 'スレッドt =新しいスレッド(...); t.setPriority(Thread.MAX_PRIORITY); t.start(); ' – bezmax

2

これに貴重な開発時間を無駄にしないでください。他のいくつかの問題を修正してください。 OSコアのメンテナンスにかかる時間がアプリの問題であれば、とにかく失敗の端を突っついている。

関連する問題