可能重复:
Java thread affinity
我有一台服务器,它有一个16核cpu。
在Java中,我需要创建一些线程(线程数小于16)。每个线程需要运行一些操作,例如,处理事件队列。
如何创建这些线程以确保每个线程永远分配给一个核心?我的意思是我不希望操作系统为一个线程交换核心。我只希望一个线程专门在固定核心上运行。
我能这样做吗?
我想要的原因是
我在同一台服务器中处理一些后台任务(计算密集型)和一些面向用户的任务。我不希望用户方面产生任何负面影响。例如,如果我的计算任务被分配到16个核心,那么为用户端运行的线程肯定会受到负面影响,对吧?
答案 0 :(得分:5)
可能会有一些“技巧”可以用于某些特定的体系结构和某些特定的JVM,但它们都是hackish和不可靠的。
答案 1 :(得分:2)
不要浪费宝贵的开发时间。修复一些其他问题。如果操作系统核心管理所花费的时间对于您的应用来说是一个问题,那么无论如何它都会在失败的边缘摇摇欲坠。
答案 2 :(得分:1)
不,你不能这样做,因为OS Scheduler旨在为线程分配线程。运行Java应用程序的JVM无权访问它。
答案 3 :(得分:1)