在Java中,我如何创建线程以便每个线程专门在一个核心中运行?

时间:2012-05-04 10:03:14

标签: java multithreading cpu

  

可能重复:
  Java thread affinity

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

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

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

我能这样做吗?


我想要的原因是

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

4 个答案:

答案 0 :(得分:5)

你不能。 JVM虚拟化所有硬件,因此您无法执行此类操作。

可能会有一些“技巧”可以用于某些特定的体系结构和某些特定的JVM,但它们都是hackish和不可靠的。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

不,你不能这样做,因为OS Scheduler旨在为线程分配线程。运行Java应用程序的JVM无权访问它。

答案 3 :(得分:1)

你不应该。

如果您真的想要,可以使用原生呼叫:Java thread affinity

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