4

可能重复:
Java 线程亲和性

我有一台服务器,它有一个 16 核 CPU。

在Java中,我需要创建一些线程(线程数小于16)。每个线程都需要运行一些操作,例如,处理一个事件队列。

如何创建这些线程以保证每个线程永远分配给一个核心?我的意思是我不希望操作系统为一个线程交换内核。我只希望一个线程专门在固定核心上运行。

我可以这样做吗?


我想要这个的原因是

我在同一台服务器上处理一些后台任务(计算密集型)和一些面向用户的任务。我不希望用户方面受到任何负面影响。例如,如果我的计算任务分配给 16 核,那么运行在用户端的线程肯定会受到负面影响,对吧?

4

4 回答 4

5

你不能。JVM 虚拟化了所有硬件,所以你不能做这样的事情。

可能有一些“技巧”可以在某些特定的体系结构和某些特定的 JVM 上工作,但这都是不可靠且不可靠的。

于 2012-05-04T10:05:34.233 回答
2

不要在这上面浪费您宝贵的开发时间。修复一些其他问题。如果操作系统核心管理所花费的时间对您的应用程序来说是一个问题,那么它无论如何都在失败的边缘徘徊。

于 2012-05-04T10:18:24.750 回答
1

不,您不能这样做,因为 OS 调度程序旨在将线程分配给内核。运行您的 Java 应用程序的 JVM 无权访问它。

于 2012-05-04T10:06:54.583 回答
1

你不应该。

如果你真的想,你可以使用本机调用:Java thread affinity

但实际上,一定要有充分的理由这样做。为什么你认为这是个好主意?

于 2012-05-04T10:08:57.980 回答